什么是可以同时绘制的界面构建器?

12

我从未使用过界面生成器中提到的“Can draw concurrently”选项。请参见下图:

enter image description here

有人能解释一下它的用途和目的吗?

2个回答

17

您可以使用它通知 AppKit, 您的 NSView 子类的 -drawRect: 实例方法可能会被从辅助线程调用。

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

有关详细信息,请参见 -[NSView setCanDrawConcurrently:],因为实际启用此行为需要完成一些操作。此外,这并不意味着 AppKit 是线程安全的,也不意味着其 NSView 子类被设计为支持此功能 - 它是为 您的 大量绘图而设计的。


2
请注意,从OS X 10.8和iOS 6.0开始,在视图的图层上设置新的drawsAsynchronously属性可能会提供足够的性能,而无需使drawRect:线程安全。在OS X上,您需要使用支持图层的视图来使用drawsAsynchronously - rob mayoff
@robmayoff 不错的技巧 +1。你有没有测量过或者找到一个好的文章?我已经写了一段时间线程安全的并发渲染器。我认为这是很多人想要避免的领域 :) - justin
1
我没有使用过它。WWDC 2012 中的 Optimizing 2D Graphics and Animation Performance 视频会对此进行讨论,从31分24秒左右开始。 - rob mayoff

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接