iOS CATiledLayer崩溃
|
我有一个iPad专用的pdf阅读器应用程序,我在其中使用滚动视图显示每个页面。我将页面保持在视图中,而将页面的另一侧保持在视图中。我对肖像和风景有不同的看法。纵向视图显示一页,横向查看器显示两页。
当iPad更改方向时,我会卸载旧方向的视图,并加载新方向的视图。假设它处于纵向视图,然后更改为横向,则应用程序将卸载纵向视图并加载横向视图。除了pdf很大时,这一切都很好。
pdf是使用tileedlayers绘制的。当方向更改为较大的pdf \时,应用程序崩溃。仅当在绘制所有图块之前更改方向后,应用程序才会崩溃。我的猜测是它崩溃了,因为它试图向视图绘制切片而不是将其卸载。那么当我卸载视图时,有没有办法停止绘制图块?
没有找到相关结果
已邀请:
2 个回复
乐遣杀屎
另外,请确保从主线程调用此方法,否则可怕的错误将等待您。
素汞读
可以踢回到主线程以让视图和图层取消分配。 这是
实现的一个示例,该实现可使
拥有的视图保持足够长的生存时间,从而可以安全地停止呈现而不会阻塞主线程。
这是一个猜测,但是Apple的某些框架/类(StoreKit,CATiledLayer,UIGestureRecognizer)声称具有
实现,但显然不能正确处理
委托。看着一些反汇编,他们确定要进行种族限制的
检定,然后直接接触弱项。正确的方法是声明一个
,它将成功执行并为您提供保证生存的强大引用,或者为
,但是它肯定不会为您提供对僵尸对象的引用(我猜是框架代码具有尚未升级到ARC)。 在引擎盖下,“ 5”会创建一个调度队列来进行后台渲染,并且似乎以不安全的方式触摸了委托属性,或者它获得了本地引用,但没有使其成为强引用。无论哪种方式,如果委托被释放,调度的渲染块将愉快地向僵尸对象发送消息。仅清除委托是不够的-它将减少崩溃的次数,但不能安全地消除它们。 设置
会执行dispatch_wait并阻塞,直到所有现有的排队渲染块完成。我们弹回主线程以确保
是安全的。 如果有人有改进建议,请告诉我。