我需要一个使用<foo>
方法的类来执行后台任务。
从不同的线程多次调用此<foo>
方法:每次调用此方法时,我都需要停止先前分配的后台线程并启动一个新线程,因此唯一有效的后台任务是最后创建的
如何做到这一点?
由于
答案 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库可以做到这一点,所以查看它们的源代码是个好主意。