iOS 성능 최적화: `shouldRasterize`를 사용해야 할 때는?

치킨치·2025년 4월 19일
0

UIView나 CALayer에서 .shouldRasterize = true를 설정하면, 그 뷰는 한 번 렌더링된 후 비트맵 캐싱된 상태로 재활용된다. 말 그대로 “한 번 그린 그림”을 다시 그리는 것이 아니라, “한 번 그린 걸 복사해서 쓰는” 방식으로 성능을 높이는 셈이다. 하지만 무작정 쓴다고 좋은 건 아니다.


🎯 언제 사용해야 할까?

1. 복잡한 뷰에 고정된 효과가 적용될 때

예: 그림자(shadow), 모서리 둥글기(cornerRadius), 투명도(opacity) 등 GPU 비용이 큰 효과가 한 번만 그려지면 되는 경우

someView.layer.shouldRasterize = true
someView.layer.rasterizationScale = UIScreen.main.scale

rasterizationScale을 설정하지 않으면 레티나 디스플레이에서 저해상도처럼 보일 수 있음


2. 애니메이션 중 변화하지 않는 하위 레이어 최적화

예: 고정된 아이콘, 둥근 프로필 이미지, 반복적으로 사용되는 로고 등

imageView.layer.shouldRasterize = true
imageView.layer.rasterizationScale = UIScreen.main.scale

UITableView나 UICollectionView 스크롤 중 GPU 사용률이 높을 때 일부 요소에 선별적으로 적용하면 성능 향상 가능


❗️주의할 점

1. 레이어가 자주 변경되면 오히려 느려짐

shouldRasterize = true 상태에서 뷰가 계속 바뀌면 매 프레임마다 다시 래스터화됨 → 성능 저하


2. 뷰 계층 전체가 아니라 해당 레이어만 캐싱됨

자식 뷰는 별도로 처리되므로, 계층 구조가 깊을수록 효과가 적을 수 있음


✅ 체크리스트: 사용할지 말지 판단할 때

  • 그림자, 마스크, cornerRadius, blur 등 GPU 부하 요소가 있나?
  • 해당 요소는 자주 바뀌지 않고 고정된 상태인가?
  • 반복되는 뷰가 많은가? (예: UITableViewCell 내부)
  • 성능 테스트 시 GPU 사용률이 높게 나오는가?

📌 결론

shouldRasterize는 iOS의 레이어 최적화 도구 중에서도 가장 신중하게 사용해야 할 속성이다.
한 줄로 성능이 좋아질 수도 있지만, 잘못 쓰면 도리어 성능을 악화시키는 양날의 검이다.

  • 고정되고 반복적으로 그려지는 요소에만 선별적으로 적용
  • Instruments의 GPU 프로파일링을 통해 전후 성능 비교 필수

📚 관련 링크

profile
풀스텍이었던 iOS개발자

0개의 댓글