2

我有一个 NSOperation 子类。我正在压倒主要并准备就绪。这不是并发操作。

当我调用 [op cancel] 时,操作不会从队列中删除。我打印出 [op isCancelled] [op isFinished] & [op isConcurrent]..

操作被取消:1 操作完成:0 操作正在并发:0

我究竟做错了什么?超类不会处理取消的操作并为非并发操作更改键“isFinished”吗?

4

2 回答 2

4

如果你覆盖ready,你也必须覆盖cancel。抽象类中发生的情况是,当调用取消时,它将操作设置为就绪,以便队列可以调用开始,开始方法检查取消标志,然后中止操作并设置 isFinished=YES。然后操作队列dealloc的操作。你不能没有另一个。

于 2012-10-17T19:57:57.347 回答
2

作为 NSOperation 子类,您有责任定期检查 [self isCancelled] 并在为 YES 时退出操作。操作队列不能(立即)取消已经在运行的操作。

于 2012-10-16T22:01:08.827 回答