据我所知,当我发送 isFinished KVO 通知并且 isFinished=YES 时,NSOperation 将从其 NSOperationQueue 中删除,并且在我发送 isCancelled KVO 通知时不会从其 NSOperationQueue 中删除。所以在我的取消功能中:
当操作之前取消时,只需返回。
操作完成后,只需返回即可。
当一个 NSOperation isExecuting 时,它的队列之前已经发送过 isExecuting KVO 通知,所以我只发送 isCancelled 和 isFinished KVO 通知,然后它的队列会移除它。
当 NSOperation isReady 时,它的队列还没有发送 isExecuting KVO 通知,所以我发送了 isExecuting KVO 通知,但是我在控制台中遇到了一些错误: go isFinished=YES 没有被它所在的队列启动。
我的问题是:当我取消一个状态刚刚就绪的操作时,我该怎么办?我希望它被队列删除。
顺便说一句,我有一个成员变量来保存操作的状态,我希望取消函数不影响它的值,所以当取消一个状态准备好的操作时,我只是发送 isExecuting KVO 通知但 isExecuting=NO,因为状态值已准备就绪。最后,我的代码是: