iOS可取消后台任务实现

时间:2014-07-07 11:10:53

标签: ios asynchronous cancellation

我需要一个使用<foo>方法的类来执行后台任务。

从不同的线程多次调用此<foo>方法:每次调用此方法时,我都需要停止先前分配的后台线程并启动一个新线程,因此唯一有效的后台任务是最后创建的

如何做到这一点?

由于

2 个答案:

答案 0 :(得分:1)

您可以使用 NSOperation 课程,以便取消操作。Refer

-(void)startMyOperation
{

    //Cancel the existing operation
    [self cancelOperation];
    self.operation = [NSBlockOperation blockOperationWithBlock:^{
   //your code to be done in the background
    }];
}

-(void)cancelOperation
{
     if(![self.operaion isFinished])
        [self.operation cancel];
}

答案 1 :(得分:1)

实现可取消操作的最佳方法是使用NSOperation和NSOperationQueue。仔细阅读文档。要创建一个在取消时实际停止执行操作的NSOperation,NSOperation执行的任务必须实时检查是否已取消,然后停止执行操作。

你应该创建一个NSOperation的子类,实现&#34; start&#34;方法,覆盖&#34; isFinished&#34;方法,可能覆盖&#34;取消&#34;方法或观察&#34; isCancelled&#34;属性,当您检测到操作被取消时,停止执行操作并以KVO兼容方式更改isFinished属性(通常通过发送willChangeValueForKey:和didChangeValueForKey)。

ASIHttpRequest库可以做到这一点,所以查看它们的源代码是个好主意。