我知道在使用drawLayer:
时会在多个线程上调用drawlayer:inContext:
和CATiledlayer
,但drawRect:
怎么办?
Apple的PhotoScroller示例代码使用drawRect:
从磁盘获取其图像,并且没有用于处理线程的特殊代码。
我正在尝试确定CATiledLayer
的模型是否必须是线程安全的。
答案 0 :(得分:2)
是的,drawRect可以并且将在多个线程上调用(在OS 4.2上测试)。
如果您的绘图速度足以超过新缩放手势的到达,则此行为不太明显,因此您的应用可能会正常工作,直到通过快速输入缩放手势进行测试。
一种替代方法是使您的模型具有线程安全性。
如果通过同时将大部分对数据模型的访问同步到一个绘图线程来实现线程安全,那么你可能也可以使用像@syncrhonize(self)这样的东西来保护drawRect的主体。工作。
我还没有找到一种方法来请求CATiledLayer只使用一个后台线程。
答案 1 :(得分:2)
我发现CATiledLayer
在iOS模拟器中使用了多个后台线程,但在我的iPhone上使用了一个后台线程。
我的Mac有一个双核处理器,而我的iPhone有一个单核(A4)。
我怀疑带有A5 CPU的iOS设备也会使用多个线程。
答案 2 :(得分:1)
你见过这个technical Q&A from Apple吗?
它不直接回答您的问题,但它可以帮助您决定如何实施您的模型。