2011-11-10 3 views

답변

15

당신은 당신의 NSView 서브 클래스 '-drawRect: 인스턴스 메소드 보조 스레드에서 호출 할 수 AppKit의 통보하는 데 사용할 수 있습니다.

10.6 이상입니다. AppKit이 비동기 적으로 뷰를 렌더링 할 때 동시 블록을 사용하여 -drawRect:이 수행되고 보조 스레드에서 -drawRect:이 호출됩니다. 즉, 하위 클래스의 구현은 스레드 안전해야합니다 (호환성을 위해 기본적으로 비활성화 됨).

자세한 내용은 -[NSView setCanDrawConcurrently:]을 참조하십시오. 실제로이 동작을 활성화하는 데 필요한 사항이 거의 없기 때문입니다. 또한 AppKit이 스레드 세이프이거나 그 서브 클래스가이 기능을 지원하도록 설계되어 있다는 것을 의미해서는 안됩니다. 무거운 드로잉 용으로 설계되었습니다.

+2

OS X 10.8 및 iOS 6.0에서는 뷰의 레이어에 새로운'drawsAsynchronously' 속성을 설정하면 스레드 안전성을 높이는''drawRect : ''를 만들지 않아도 충분한 성능을 제공 할 수 있습니다. OS X에서는 레이어 기반보기를 사용하여 'drawsAsynchronously'를 사용해야합니다. –

+0

@robmayoff 멋진 팁 +1. 우연히 이것을 측정 했습니까? 아니면 훌륭한 글을 찾아 왔습니까? 나는 한 동안 스레드 세이프 동시 렌더러를 작성 해왔다. 나는 그것이 많은 사람들이 피하고 싶을 것이라고 생각한다. – justin

+1

나는 그걸 가지고 놀지 않았다. * [WWDC 2012] (https://developer.apple.com/videos/wwdc/2012/)의 * 2D 그래픽 및 애니메이션 성능 최적화 * 비디오에서 31m24s 전후부터 설명합니다. –

관련 문제