Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS可取消后台任务的实现_Ios_Asynchronous_Cancellation - Fatal编程技术网

iOS可取消后台任务的实现

iOS可取消后台任务的实现,ios,asynchronous,cancellation,Ios,Asynchronous,Cancellation,我需要一个带有执行后台任务的方法的类 这个方法从不同的线程被多次调用:每次调用这个方法时,我都需要停止以前分配的后台线程并启动一个新线程,因此唯一有效的后台任务是最后创建的 如何做到这一点 谢谢您可以使用NSOperation类来取消您的操作 实现可取消操作的最佳方法是使用NSOperation和NSOperationQueue。仔细阅读文档。要创建在取消时实际停止操作的NSOperation,NSOperation执行的任务必须不时检查是否已取消,然后停止操作 您可能应该创建NSOperati

我需要一个带有执行后台任务的
方法的类

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

如何做到这一点


谢谢

您可以使用NSOperation类来取消您的操作


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

您可能应该创建NSOperation的子类,实现“start”方法,重写“isFinished”方法,可能重写“cancel”方法或观察“isCancelled”属性,当您检测到操作被取消时,停止操作并以兼容KVO的方式更改isFinished属性(通常通过发送willChangeValueForKey:和didChangeValueForKey)

ASIHttpRequest库就是这样做的,所以最好看看它们的源代码

-(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];
}