2

我有一些纹理和音效预加载需要异步执行,以便在我正在开发的 iOS 游戏中创建流畅的用户体验。

我试图在 NSOperationQueue 和 NSThread 之间做出决定,以便在游戏过程中加载这些游戏资源。

NSOperationQueue 似乎是一个明显的赢家并且有很多好处,但我担心对这个“后台”资源加载任务进行有效的优先级控制,这样我就可以根据它消耗的周期数来拒绝它,以免影响帧率。

我看到 NSOperationQueue 有一个“优先级”的概念,但它看起来与 NSThread 的“优先级”概念不同。如果我错了,请纠正我,但 NSThread 的优先级与系统上运行的其他线程相关,而 NSOperation 的优先级是该任务相对于其他排队任务的优先级。

我想知道的是......

与当前在设备上运行的其他线程相比,有没有办法控制给定 NSOperationQueue 任务的优先级与它可以消耗的周期数(相对于相对优先级与其他排队任务相比)?

在 NSOperationQueue 的任务中更改当前线程的优先级是否安全?(使用 NSThread 的 +setPriority)

4

1 回答 1

4

NSOperation 的一个实例也有一个“setThreadPriority:”方法,以及“setQueuePriority:”。

这绝对是您正在寻找的。

- (void)setThreadPriority:(double)priority

您指定的值映射到操作系统的优先级值。指定的线程优先级仅在执行操作的 main 方法时应用于线程。在执行操作的完成块时不应用它。对于您创建自己的线程的并发操作,您必须在自定义启动方法中自己设置线程优先级,并在操作完成时重置原始优先级。

于 2011-09-21T17:12:52.803 回答