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