NSOPeration取消了错误

时间:2014-06-17 10:49:40

标签: ios nsoperationqueue

我在我当前的应用程序中继承了NSOperation。所有功能都按照我的愿望运作良好。我可以取消操作并向操作队列添加新操作。除了成功之外,下面是我在控制台中找到的警告/错误声明:

***SubOperation 0x19ec1bd0 went isFinished=YES without being started by the queue it is in*

通过上述警告我能够发现,我在开始前取消操作。因此,将来是否会发生内存泄漏或功能中断?

警告的目的究竟是什么?

到目前为止功能正在运行且没有中断,即使我们仍然需要考虑警告并解决它?

您的所有建议都已公开。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

然后先检查操作是否在队列中

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

NSOperation *operation = [[NSOperation alloc] init];

[queue addOperation:operation];

if([queue operations] containsObject:operation])
    NSLog(@"Operation is in the queue");
else
    NSLog(@"Operation is not in the queue");

或者您可以迭代所有对象:

for(NSOperation *op in [queue operations])
    if (op==operation) {
        NSLog(@"Operation is in the queue");
    }
    else {
        NSLog(@"Operation is not in the queue");
    }