CALayer 성능 향상

개발/iOS 2017. 8. 3. 20:06
반응형

CALayer를 사용하면서 성능 향상 팁을 설명하고자 합니다.


CALayer는 UIView에 프로퍼티(layer)로 선언되어 있으며 여러가지 형태를 변형 시킬 수 있습니다. 

간단한 예로는 버튼이나 라벨등 UI 오브젝트들의 테두리 모양을 동그랗게 한다던가, 그림자를 효과를 준다던가, 테두리 라인 굵기 등 여라가지 형태로 변형을 할 수 있습니다.


이렇게 처리된 UIView 상속 받은 객체(버튼, 라벨등 도 포함)들은 Gesture Recognizer 으로 확대/축소/회전 등 좌표나 크기를 계속 변경하다 보면 성능이 현저히 느려지는 문제가 발생하게 됩니다.


그러나 CALayer 프로퍼티인 shouldRasterize를 YES로 설정해 주면 속도가 향상됩니다.

이유는 Bitmap 형식으로 렌더링을 해주기 때문에 입니다. 


view.layer.shouldRasterize = YES;


참고로 디폴트값은 NO로 설정되어 있고, No로 되어 있으면 가능할때마다 대상을 압축을 하게 됩니다.

그리고 Bitmap은 투명값이 없어 투명으로 이루어진 색상은 처리되지 않습니다. 

투명한 값이 있는 Layer에 적용하게 투명색이 검정색으로 나오게 됩니다. 

잘 판단하시어 사용하면 유용하게 사용할 수 있을 듯 합니다.


---------------------------------------------------------------------------------


GCD 

- 블럭으로 구현되어 있어서 간단하게 사용가능, 또한 코드 가독성도 좋다.

- 저수준 스레드 구현 가능하기에 속도에 좋다고 한다. 다만, 상태감시, 오퍼레이션 캔슬 등등 다 직접 만들어야 한다



performSelector~:

셀렉터를 이용하여 만든 옛날방식이다. GCD를 이용하는것과 같다. 빌드 시 ARC 경고가 뜨기도 하는데 ARC와의 궁합이 좋지 않은것 같다. 개인적으로 비추천.



Timer..

간단한 처리는 Timer로 해결 가능하지만 UI이외의 용도로 사용은 불안한거 같다. 




반응형
admin