我正在实施联系人模块,主要是添加,删除,搜索和列出联系人。
在这里,我使用文件来保存数据,例如将所有联系人存储在文件(json格式)中并反序列化回对象。
现在我的目标是使用nsoperation在后台线程中执行序列化和反序列化函数。以及一个类如何扩展nsopertions以及该类中的操作。
我是mac os的新手。我无法理解nsoperation究竟意味着什么?如何在我的module.how中使用它以使它们同时运行。我看过很多教程但是对我来说它仍然非常笨拙。我真的需要帮助。谢谢。
答案 0 :(得分:3)
我们对您的问题有很多答案
什么是NSOperation?
NSOperation类是一个用于封装的抽象类 与单个任务关联的代码和数据。因为它是抽象的, 你不直接使用这个类,而是使用子类或使用其中一个 系统定义的子类(NSInvocationOperation或 BlockOperation)执行实际任务。尽管是抽象的, NSOperation的基础实现确实包含重要的逻辑 协调安全执行任务。存在这个 内置逻辑允许您专注于实际的实现 你的任务,而不是确保它工作所需的胶水代码 正确使用其他系统对象。
Then Simple meaning of NSOperation
NSOperation代表一个单一的工作单元。这是一个抽象类 它提供了一个有用的,线程安全的结构来建模状态, 优先级,依赖关系和管理。
您是否需要同时运行?
同时做多件事。
利用多核CPU中可用的核心数量。
并行运行多个程序。
为什么选择NSOperationQueue?
对于NSOperation建立一个没有意义的情况 自定义NSOperation子类,Foundation提供具体的 实现NSBlockOperation和NSInvocationOperation。
适合NSOperation的任务示例包括: 网络请求,图像大小调整,文本处理或任何其他 可重复的,结构化的,长期运行的任务,产生相关的 国家或数据。
但是简单地将计算包装到对象中并没有太大作用 有点疏忽。这就是 NSOperationQueue 进来的地方
什么是NSOperationQueue?
NSOperationQueue规定了并发执行操作。它 充当优先级队列,以便在a中执行操作 大致以先进先出的方式,更高优先级 (NSOperation.queuePriority)跳得越来越快 优先级较低的。 NSOperationQueue也可以限制最大值 在任何给定时刻要执行的并发操作数, 使用maxConcurrentOperationCount属性。
NSOperationQueue本身由Grand Central Dispatch队列支持, 虽然这是私人实施细节。
要启动NSOperation,请先调用start,或将其添加到 NSOperationQueue,一旦它到达前面就让它开始 队列。由于NSOperation的这么多好处来自于 NSOperationQueue,添加操作几乎总是更好 一个队列而不是直接调用start。
操作队列通常提供用于运行它们的线程 操作。在OS X v10.6及更高版本中,操作队列使用 libdispatch库(也称为Grand Central Dispatch)启动 执行他们的业务。结果,操作总是如此 在一个单独的线程上执行,无论它们是否存在 指定为并发或非并发操作
所以你的代码应该是
NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init];
[backgroundQueue addOperationWithBlock:^{
//Your Background Work kHere
.....
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//Your Main Thread(UI) Work Here
....
}];
}];