这是我的计划的一部分。按下按钮后,findDuplicates中的循环在后台线程中启动。有没有办法通过按另一个按钮来停止/杀死线程/循环?
- (IBAction)countDups:(id)sender {
[self performSelectorInBackground:@selector(findDuplicates) withObject:nil];
}
-(void)findDuplicates
{
...
for(int index=0;index<self.resultList.count;index++)
{ ... }
...
}
答案 0 :(得分:2)
您可以从后台线程返回。创建一个成员变量,用NO初始化它。
- (IBAction)countDups:(id)sender {
mCancel = NO;
[self performSelectorInBackground:@selector(findDuplicates) withObject:nil];
}
-(IBAction)stop
{
mCancel = YES; //BOOL member variable;
}
-(void)findDuplicates
{
...
for(int index=0;index<self.resultList.count;index++)
{
If(mCancel)
return; // return for thread to end
... }
...
}
答案 1 :(得分:0)
在终止帖子下的Threading Programming Guide中阅读。 performSelectorInBackground:withObject:
本质上创建一个新线程并在其上运行代码。