我在我当前的应用程序中继承了NSOperation
。所有功能都按照我的愿望运作良好。我可以取消操作并向操作队列添加新操作。除了成功之外,下面是我在控制台中找到的警告/错误声明:
***SubOperation 0x19ec1bd0 went isFinished=YES without being started by the queue it is in*
通过上述警告我能够发现,我在开始前取消操作。因此,将来是否会发生内存泄漏或功能中断?
警告的目的究竟是什么?
到目前为止功能正在运行且没有中断,即使我们仍然需要考虑警告并解决它?
您的所有建议都已公开。
答案 0 :(得分:1)
您有责任在继承[self isCancelled]
时定期检查NSOperation
,如果是YES
则退出操作。操作队列无法(立即)取消已在运行的操作。
如果您覆盖ready
,则必须覆盖cancel
。抽象类中发生的情况是,当调用cancel
时,它将操作设置为ready
,以便队列可以调用start
,start
方法检查已取消的标志,然后中止操作并设置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");
}