4

我知道这一点,drawLayer:并且drawlayer:inContext:在使用 a 时会在多个线程上被调用CATiledlayer,但是呢drawRect:

Apple 的 PhotoScroller 示例代码用于drawRect:从磁盘获取其图像,并且它没有用于处理线程的特殊代码。

我正在尝试确定我的 a 模型是否CATiledLayer必须是线程安全的。

4

3 回答 3

2

是的,drawRect 可以并且将在多个线程上调用(在 OS 4.2 上测试)。

如果您的绘图速度足以超过新缩放手势的到来,则此行为不太明显,因此您的应用程序可能会正常工作,直到通过快速输入缩放手势进行测试。

一种替代方法是使您的模型线程安全。

如果通过一次将对数据模型的大部分访问同步到一个绘图线程来实现线程安全,那么您也可以使用 @syncrhonize(self) 之类的东西将 drawRect 的主体互斥,这似乎可以工作。

我还没有找到一种方法来请求 CATiledLayer 只使用一个后台线程。

于 2010-10-25T12:02:37.577 回答
2

我发现CATiledLayer在 iOS 模拟器中使用了多个后台线程,但在我的 iPhone 上使用了一个后台线程。

我的 Mac 有一个双核处理器,而我的 iPhone 有一个单核 (A4)。

我怀疑带有 A5 CPU 的 iOS 设备也会使用多线程。

于 2012-01-20T20:12:32.580 回答
1

您看过Apple 的技术问答吗?

它不会直接回答您的问题,但可以帮助您决定如何实现您的模型。

于 2010-06-18T20:07:51.500 回答