【发布时间】:2011-05-01 01:19:57
【问题描述】:
我今天遇到了一个有趣的 iOS 问题,涉及 CATiledLayer。这仅发生在设备上 - 而不是在模拟器中。
我的视图通过 drawLayer: inContext: 委托回调在它的 CALayer 中绘制。该层有一个 CATiledLayer 派生的子层,它在重写的 drawInContext: 方法中进行自己的绘图。
两个图层都通过 CGContextDrawPDFPage() 渲染 pdf 内容。 (CALayer 绘制低分辨率版本,而 CATiledLayer 子层在顶部绘制高分辨率内容。)
我遇到了一个场景,我将完成视图 - 将其从其超级视图中删除并释放它。在视图上调用 dealloc()。稍后,系统将调用 CATiledLayer 的 drawInContext: 方法(在后台线程上)。它会绘制,但是从 Springboard 方法返回时会崩溃,并且这样做也会导致我的应用程序崩溃。
我通过在 CATiledLayer 中设置一个标志来修复它,告诉它不再渲染,来自视图的 dealloc 方法。
但我只能想象有一种更优雅的方式。为什么在父层之后仍然调用了CATiledLayer drawInContext:方法,并且父层的视图被释放了?关闭视图以免发生这种情况的正确方法是什么?
【问题讨论】:
标签: ios calayer catiledlayer