Iphone 如何停止使用NSOperationQueue启动的任务?

Iphone 如何停止使用NSOperationQueue启动的任务?,iphone,ios,nsoperationqueue,Iphone,Ios,Nsoperationqueue,我以以下方式使用NSOperationQueue创建了一个进程: queue = [[NSOperationQueue alloc]init]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selec

我以以下方式使用NSOperationQueue创建了一个进程:

queue = [[NSOperationQueue alloc]init];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self 
                                                                           selector:@selector(loadDataWithOperation)object:nil];
[queue addOperation:operation];
[operation release];
loadDataWithOperation
方法中,我编写了打印无限数的代码

现在我调用了cancelAppOperations来停止它的执行,并且我还尝试像这样将挂起的值设置为YES

[queue setSuspended:YES]
即使进程仍在运行,我仍使用“stop”按钮调用stoping方法。它正在调用同一个类


如何停止它?

您可以在队列中的所有操作开始执行之前向它们发送取消消息,但如果您的操作已经在执行,则需要在此处处理取消消息以暂停队列 [queue setSuspended:YES]工作正常,我在那里检查停止for循环的条件,即

if(![queue isSuspended]) 
{
        NSLog(@"elements are :%d",i);
}
else
{
    break; 
}

我将这几行代码放在“loadDataWithOperation”方法中

您何时调用cancel,从何处调用?以进一步展开此答案:NSOperation子类实例需要检查其取消。如果正在执行网络操作或解析/数据库操作,则在执行的某些点上,需要检查cancel属性以检查对象是否已接收到cancel操作。换句话说,NSO操作不会为您自动取消。这必须在NSOperation子类中完成。