NSOperation子类isCancelled isFinished isConcurrent

时间:2012-10-16 21:53:15

标签: objective-c

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

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

取消操作:1操作完成:0操作并发:0​​

我做错了什么? 超类不会处理一个被取消的操作并且为非并发操作更改键'isFinished'吗?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

作为NSOperation子类,您有责任定期检查[self isCancelled],如果是,则退出操作。操作队列无法(立即)取消已在运行的操作。