相关视图消失后调用的CATiledLayer drawInContext

Tom*_*ift 4 calayer catiledlayer ios

我今天遇到了一个涉及CATiledLayer的有趣的iOS问题.这只发生在设备上 - 而不是在模拟器中.

我的视图通过drawLayer:inContext:delegate callback在其CALayer中绘制.该图层具有CATiledLayer派生的子图层,该图层在重写的drawInContext:方法中执行自己的绘图.

这两个层都通过CGContextDrawPDFPage()呈现pdf内容.(CALayer绘制低分辨率版本,而CATiledLayer子层在顶部绘制高分辨率内容.)

我遇到了一个我将完成视图的场景 - 将其从超级视图中删除并释放它.在视图上调用dealloc().稍后,系统将调用CATiledLayer的drawInContext:方法(在后台线程上).它会绘制,但是从方法返回时,Springboard会崩溃,并且在这样做时,也会关闭我的应用程序.

我通过在视图的dealloc方法中在CATiledLayer中设置一个标志来修复它,告诉它不再渲染.

但我只能想象有一种更优雅的方式.为什么仍然在父图层之后调用CATiledLayer drawInContext:方法,并且父图层的视图被解除分配?关闭视图的正确方法是什么,以免发生这种情况?

ste*_*ete 9

缓慢但最好的修复方法是设置view.layer.contents = nil.这等待线程完成.