我在一个循环中使用了以下代码:
-(void)getUpdatedComments
{
if(checkComments)
{
objParseOperation=[[ParseOperation alloc] initWithUDID:[[NSUserDefaults standardUserDefaults] valueForKey:kDeviceUDID]:self];
[operationQueue addOperation:objParseOperation3];
}
}其中operationQueue是NSOperationQueue类型的对象。我每隔几秒钟就调用一次此方法。
如果我在第一次之后调用此方法,我需要取消之前的操作还是只执行[objParseOperation release]
发布于 2012-02-09 17:49:20
如果你打算使用相同的队列来添加更多的新操作,那么释放它并创建一个新的操作就没有多大用处了。只需取消所有操作,然后添加更多操作就足够了。您可以通过调用队列上的cancelAllOperations来完成此操作。请注意,已在运行的操作将继续运行,除非它们检查取消。
此方法向队列中当前的所有操作发送取消消息。排队的操作在开始执行之前被取消。如果某个操作已经在执行,则由该操作识别取消并停止正在执行的操作。
是否释放队列将立即释放入队的操作没有文档记录,因此应该被视为未定义的行为。因此,您不应该假设它可以以任何一种方式工作,也不应该依赖它(参见dangerous to autorelease NSOperationQueue)。
然而,有证据表明,操作将保留其队列,例如,GCD队列由系统保留,而它们具有运行/挂起的异步块。您可以在Grand Central Dispatch documentation中读到“队列由系统保留,直到块运行完成”。但是,文档并没有像上面提到的那样指定NSOperationQueues的行为。
dispatch_async
提交一个块以便在调度队列上异步执行,并立即返回。
dispatch_queue_t dispatch_async( dispatch_queue_t队列,dispatch_block_t block);
参数
队列
提交数据块所在的队列。该队列由系统保留,直到该块运行完成为止。此参数不能为空。
区块
要提交到目标调度队列的块。此函数代表调用者执行Block_copy和Block_release。此参数不能为空。
讨论
此函数是将块提交到调度队列的基本机制。对此函数的调用总是在提交块后立即返回,而不是等待块被调用。目标队列确定该块是相对于提交到该同一队列的其他块串行地还是并发地被调用。独立的串行队列彼此之间是并行处理的。
https://stackoverflow.com/questions/9206401
复制相似问题