我有一大堆旋转动画UIView实例,其内容设置为各种CGImage,它们都是(并且本质上是需要的)在运行中创建的。它工作得很好,但图像生成速度很慢(大约1/4秒到1秒 - 即不可接受)。所以我想要做的是非常快速地产生一个低分辨率的近似值(比如1/100秒),并将UIView的CALayer的内容(例如,view.layer.contents
)设置为快速的低分辨率图像,并且然后立即产生后台线程以生成高分辨率版本,以便在准备就绪后立即替换低分辨率版本。在后台线程上呈现新的UIView图层内容?
什么是一些明智的方法来做到这一点?
我的想法是我应该使用GCD(Grand Central Dispatch)安排后台线程,然后在完成时再次使用它发送消息。如果我这样做了,发送新的高分辨率替换图像作为完成消息的一部分是否合理?
如果我需要取消后台线程该怎么办?如果用户前往不同的对象,会发生这种情况,在这种情况下,我必须取消当前的后台任务并为其他视图启动一个新的后台任务。 (这实际上是一个相当常见的事件,所以我一定要处理它)。我不认为我可以杀死后台任务,因为它可能处于处理CGPath,CGGradient,CGImage等对象的过程中那需要被释放。另一种可以测试的线程设置标志的方法有哪些?我应该从主线程向后台线程发送某种“中止”信号,然后让背景线程在最舒适的位置自行放弃创建图像?
从[WWDC 2012](https://developer.apple.com/videos/wwdc/2012/)观看会话211 - 在iOS上构建并发用户界面。它有很多信息直接解决你的问题。你可能也想看看会话235和238. – 2012-08-09 03:42:58
很酷,我刚看完#211。可能,NSOperationQueue听起来像是要走的路。谢谢。 – 2012-08-09 04:46:10
感谢rob mayoff,在观看Session 211之后,我解决了我的UITableView性能问题! – vampirewalk 2013-03-24 05:26:41