【问题标题】:iOS cancellable background task implementationiOS可取消后台任务实现
【发布时间】:2014-08-27 20:30:30
【问题描述】:

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

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

如何做到这一点?

谢谢

【问题讨论】:

    标签: ios asynchronous cancellation


    【解决方案1】:

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

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

    ASIHttpRequest 库就是做这种事情的,所以最好看看他们的源代码。

    【讨论】:

      【解决方案2】:

      您可以使用 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];
      }
      

      【讨论】:

        猜你喜欢
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多