ios - 在 iOS 的后台线程中绘图

标签 ios multithreading uikit core-graphics nsoperation

我有一个包含一些非常复杂的绘图逻辑的 View (它是从 GIS 数据绘制的 map View )。在主线程上执行此绘图会锁定 UI 并使应用程序无响应。我想使用例如 NSOperation 将绘图移到后台线程。

构建这个的最佳方式是什么?

我目前正在绘制到一个关闭内存 CGContext,然后将其转换为一个 CGImageRef,我将其发送到 View 以在主线程上进行 blit。不幸的是,这会占用大量内存,而且似乎不再使用 GPU 加速,因为它的速度要慢得多。有什么方法可以直接从后台线程绘制到 View 吗?我知道 UIKit 不是多线程安全的,但也许有某种方法可以在我进行绘图时锁定 View ?

最佳答案

超越 iOS 4.0,drawing is thread safe .您可能需要自己创建一个 CGContext,但没有理由不能在后台线程上绘制。

也就是说,大多数 UIKit 操作不是。如果您需要执行这些操作,您始终可以在后台线程中进行准备,然后在需要时使用 performOnMainThread。甚至还有 waitUntilDone。也就是说,您显然应该使用 NSOperationNSOperationQueue

关于ios - 在 iOS 的后台线程中绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702013/

相关文章:

ios - UIKit Dynamics 和 UIKit Animation 有什么区别?

ios - 错误 : received error: [57] Socket is not connected - iOS 10

iphone - 将 NSManagedObject 转换为子类对象

java - 多线程服务器: one thread per client connection

java - 每个连接线程模型

iPhone,从 Cocoa Touch 获取播放列表

android - 如何将文本放入带有 flutter 的滑动器中?

iphone - iOS:检查手机是否被锁定

c++ - 静态无功能线程安全吗?

iphone - 将多个转换应用于 UIView/CALayer