所以这几天我一直在思考这个问题,我似乎找不到一个好的方法来让它工作。
我有一个一次NSOperationQueue只允许一个操作。我从文档中了解到:
在 OS X v10.6 及更高版本中,取消操作会导致操作忽略它可能具有的任何依赖项。这种行为使队列可以尽快执行操作的 start 方法。反过来, start 方法将操作移动到完成状态,以便可以将其从队列中删除。
当我发送取消它会设置isCancelled为YES,但我的问题是:
假设我有 20 个NSOperation在队列中,我刚刚取消了第 18 个,它会一直停留在NSOperationQueue它可以运行并说它已经完成(我的NSOperation检查正确isCancelled)但是因为它停留在队列中,它也停留在UITableView我设置dataSource的位置喜欢myOperationQueue.operations。
这就是困扰我的地方,用户将单击Cancel哪个将调用该cancel方法,NSOperation但该操作仍将显示,因为它仍在队列中。
我想过start在cancel方法中调用,但不允许只有队列可以start。
编辑:我也试图isFinished覆盖cancel:
[self willChangeValueForKey:@"isFinished"];
_isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
它可以工作,但它也会发送start到队列中的下一个NSOperation,它可能导致同时拥有 2 个NSOperation,而我只想要一个。