CATiledLayer drawLayer:inContext:在检索要绘制的图像时释放视图时崩溃

Posted

技术标签:

【中文标题】CATiledLayer drawLayer:inContext:在检索要绘制的图像时释放视图时崩溃【英文标题】:CATiledLayer drawLayer:inContext: crashing when the view is deallocated while the image to draw is being retrieved 【发布时间】:2011-04-09 00:47:44 【问题描述】:

当我的 CATiledLayer 正在检索图像以在后台线程中绘制时,当我的 ViewController 被释放时,我的应用程序崩溃了。我收到一条消息

-[MyViewController respondsToSelector:]: message sent to deallocated instance 0x8f58e00

调试器显示

0 ___forwarding___
1 __forwarding_prep_0__
2 -[CATiledLayer(CATiledLayerPrivate) canDrawRect:levelOfDetail:]
3 tiled_layer_render
4 CAImageProviderThread
5 CAImageProviderBackgroundThread
6 CA::DispatchGroup::thread
7 thread_fun
8 _pthread_start

现在,我确实想释放 MyViewController 的某个实例,因为我不再需要它了。但是当它从后台线程返回时如何阻止它崩溃呢?

【问题讨论】:

【参考方案1】:

解决了。在解除分配 MyViewController 时,我应该将 CATiledLayer 的委托设置为 nil。从现在开始,我会记得为代表们这样做。

【讨论】:

以上是关于CATiledLayer drawLayer:inContext:在检索要绘制的图像时释放视图时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS之CATiledLayer的属性简介和使用

如何从我的 CATiledLayer 中移除这些旋转伪影?

CALayer委托方法drawLayer没有被调用

iOS:使用 UIView 的 'drawRect:' 与其层的委托 'drawLayer:inContext:'

CALayer 没有实现自定义 drawLayer:inContext: 方法

IOS中drawLayer使用CGContent