2011-11-10 25 views

回答

15

你可以用它来通知了AppKit,你NSView子类-drawRect:实例方法可以从辅助线程调用。

它是10.6+。当/如果AppKit异步渲染视图,-drawRect:使用并发块执行,并且您的-drawRect:将从辅助线程调用。这意味着你的子类的实现必须是线程安全的(为了兼容性,默认情况下它是禁用的)。

有关详细信息,另请参阅-[NSView setCanDrawConcurrently:],因为实际启用此行为所需的操作很少。此外,它不应该暗示AppKit是线程安全的,或者它的子类被设计为支持这个功能 - 它被设计用于你的重绘图。

+2

请注意,从OS X 10.8和iOS 6.0开始,在视图层上设置新的'drawsAsynchronously'属性可以提供足够的性能,而不会使'drawRect:'线程安全的复杂化。在OS X上,您需要使用层次支持的视图来使用“异步绘制”。 –

+0

@robmayoff不错的提示+1。你有没有机会衡量这个或者遇到一个很好的写作?我一直在编写线程安全的并发渲染器。我想这是一个很多人都想避免的区域:) – justin

+1

我还没有玩过它。来自[WWDC 2012](https://developer.apple.com/videos/wwdc/2012/)的*优化2D图形和动画性能*视频将在31分24秒左右开始讨论它。 –

相关问题