용어 "경량"는 Mac에서 발생하는 문서의 조각에서 비롯됩니다. Joe가 지적한 것처럼 NSView는 iPhone의 UIView와 비교할 때 상당히 복잡한 UI 요소입니다. 리소스가 제한적인 모바일 장치에서도 화면을 중심으로 수십 개의 UIView를 애니메이션으로 만들 수 있지만 NSView는 화면에 많은 요소를 추가하기 시작할 때 시스템에 더 많은 부담을줍니다. UIKit은 처음부터 코어 애니메이션을했다, 애플이 일을 무엇을 배울 수있는 기회를 가지고 무엇을 AppKit의하지 않았다 때문에, AppKit의 이상 UIKit의 새로운 시작에 의해 얻은 것들 중 하나입니다. 비교
는있는 CALayer는 거의가 그리는 기본 GPU 기반 비트 맵 사각형 텍스처에 추가, 그래서 그들은 많은 오버 헤드를 추가하지 마십시오. iPhone에서는 UIView가 CALayer 주위의 경량 래퍼이기 때문에 UIView와 크게 다르지 않습니다. 나는이에 카운트 Chocula에 동의하고있는 CALayer가 GPU에 비트 맵 텍스처를 래핑하는 것처럼 보인다 말할거야
. 예. 사용자 정의 Quartz 드로잉을 지정하여 레이어의 내용을 구성 할 수 있지만 필요한 경우에만 드로잉이 수행됩니다. 레이어의 내용이 그려지면 레이어를 이동하거나 애니메이션을 적용 할 때 다시 그릴 필요가 없습니다. 변환을 레이어에 적용하면 벡터 그래픽을 처리하지 않는다는 신호인 확대 된 픽셀을 얻을 수 있습니다.
또한, -renderInContext:
접근 방식이 PDF에 적합하지 않기 때문에 Core Plot 프레임 워크 (그리고 내 응용 프로그램에서)를 사용하여 CALayers의 일반적인 그리기 프로세스를 재정의해야했습니다. 이것을 사용하여 레이어와 하위 레이어를 PDF로 렌더링하면 벡터 요소가 아닌 최종 PDF에서 레이어가 래스터 비트 맵으로 표시된다는 것을 알 수 있습니다. 다른 렌더링 경로를 사용하여 PDF에 적합한 출력을 얻을 수있었습니다.
iOS 3.2의 새로운 shouldRasterize
및 rasterizationScale
속성으로 아직 처리하지 못했습니다.
실제로 CALayers (및 백업 레이어가있는 UIView)는 비트 맵 콘텐츠를 고려할 때 많은 메모리를 소비합니다. "가벼운"측정 값은 콘텐츠 상단에 얼마나 추가되는지, 이는 거의 적습니다. Object Allocation과 같은 도구에서 메모리 사용량을 볼 수는 없지만 응용 프로그램에 큰 레이어를 추가하면 Memory Monitor에서 응용 프로그램 또는 Core Animation 서버를 소유하고있는 SpringBoard에서 메모리가 급증하는 것을 볼 수 있습니다.
프리젠 테이션 계층과 모델 계층에서 비트 맵이 중복되지 않습니다. 주어진 순간에 하나의 비트 맵 텍스처 만 화면에 표시되어야합니다. 서로 다른 레이어는 주어진 순간에 속성과 애니메이션을 추적하기 만하므로 매우 적은 정보 만 각각에 저장됩니다.
Georgeous! 감사! 이 모든 것들을 어디에서 알 수 있습니까? 그걸 어디서 읽어야 할까? –
@BugAlert - 주로 엔지니어와 대화하고 CALayers와 많은 시간을 내 응용 프로그램에서 사용합니다. 나는 2010 년 Core Animation WWDC 비디오뿐만 아니라 iPhone의 성능 튜닝에 관한 WWDC 2009 비디오를 통해 Apple이 이에 대해 힌트를 흩트 리고 있다고 생각합니다. Core Animation Programming Guide는 렌더링 아키텍처에 대해서도 자세히 설명합니다. –
위대한 답변, 엄청난 양의 정보에 감사드립니다! –