我有一个用于复制文件的 NSOperation。我使用 write() 复制文件,然后可以在每个 write() 之间“暂停”复制。 但是我不知道如何:
感谢您的帮助
你可以用信号量来做到这一点;但与其使用信号量来控制对一段代码的访问(即获取锁、使用资源、释放锁模型),不如将其视为一个门 - 获取、测试条件/块、释放并继续。
NSCondition
会给你一个高级信号量。在概述中,第 3 步是“测试我是否应该暂停”,第 4 步和第 5 步变成“不,所以什么都不做”。
我会回顾一下美丽的评论,提前带点“哲学”。
NSOperation
队列的使用首先是 RID US 从需要信号量、触发、监视触发器、轮询条件等等。如果您发现自己正在处理这些“旧式”并发问题,那么您很可能走错了路,偏离了 NSOperationQueue
的道路。它必须很简单。它必须没有“螺纹边缘”。
现在,你如何打破一个长
NSOperation
到受控和管理的过程?
简单地说,通过将
NSOperation
分解成一系列更小的 NSOperations。在你的情况下 - 每个 NSOperation
会(比如说,只是例子)复制一个文件。
在这里——您可以使用包含 NSOperationQueue 和 NSOperation 的大量工具。
NSOperationQueue
来实现您的效果,因为您知道您的每个“原子”操作(比如完成单个文件)都得到了正确处理。NSProgress
完美集成的NSOperationQueue
免费获得您的“进度”。真的无穷无尽,做起来也很容易
最后 - 如果你想享受比
NSOperation
开箱即用的“更好的依赖”机制 - 看看我的 自己的问题 并阅读美丽的答案,以及我自己对问题的看法。