Jac*_*ale 7 iphone objective-c nsoperation nsthread nsoperationqueue
我正面临着我的应用程序的设计问题.
基本上,以下是我在我的应用程序中要做的事情.
单个任务是这样的:
可能会同时执行许多任务.
一个任务中的步骤显然是ordered(即,没有第2步下载json,第3步不能继续),但它们也可以discrete.我的意思是,例如,task2的第4步可以在task1的第3步之前执行(如果task2的下载速度比task1的更快)
任务有优先事项.用户可以启动具有更高优先级的任务,因此将尝试在所有其他任务之前执行所有任务的步骤.
我希望UI能够尽可能地响应.
所以我打算创建一个优先级最低的NSThread.
我在该线程中放置了一个自定义优先级事件队列.任务的每一步都成为一个事件(工作单位).因此,例如,下载json的步骤1成为事件.下载后,该事件会为步骤3生成另一个事件并将其放入队列中.每个事件都有自己的优先级设置.
现在我看到这篇文章:并发和应用程序设计.Apple建议我们Move Away from Threads使用GCD或NSOperation.
我发现这NSOperation与我的草稿设计相匹配.但我有以下问题:
谢谢
考虑到 iPhone/iPad 的 cpu 核心,我应该只使用一个 NSOperationQueue 还是创建多个 NSOperationQueue?
在大多数情况下,两个(CPU、网络+I/O)或三个(CPU、网络、I/O)串行队列应该可以很好地工作,以保持应用程序的响应能力,并使您的程序按其绑定的方式流式传输工作。当然,您可能会发现另一种组合/公式适用于您的特定工作分配。
NSOperationQueue 或 NSOperation 是否会以最低线程优先级执行?执行是否会影响 UI 响应(我关心,因为这些步骤涉及计算)?
默认情况下不是。看看-[NSOperation setThreadPriority:]你是否想降低优先级。
我可以从另一个 NSOpeartion 生成 NSOpeartion 并将其放入队列吗?我在 NSOperation 中没有看到队列属性,我如何知道队列?
当然。如果您使用我概述的串行方法,找到正确的队列就足够容易了——或者您可以使用 ivar。
NSOperationQueue 如何与 CoreData 配合?每次访问 CoreData 时,我都应该创建一个新的上下文吗?会很贵吗?
(没有意见)
任务的每一步都变成一个NSOperation,这样的设计正确吗?
是的 - 将队列划分到它所绑定的资源是一个好主意。
| 归档时间: |
|
| 查看次数: |
1894 次 |
| 最近记录: |