iphone - 如何在IOS中取消/退出/停止线程对象或后台运行的线程的执行

标签 iphone objective-c ios5 ios6

我在后台分离线程做一些操作,引用代码如下

 currentThread = [[NSThread   alloc]initWithTarget:contactServiceselector:@selector(requestForContactBackup:)object:msisdn];

 [currentThread start];

这个currentThread是AppDelegate中声明的指针。 我的 View 上有一个按钮,点击它,后台线程的执行应该停止。引用以下代码:

-(void)cancelTheRunningTasks {
    
   if(self.currentThread !=nil) {

        [currentThread cancel];
        NSLog(@"IsCancelled: %d",[currentThread isCancelled]);   //here Yes returns
        [self removeNetworkIndicatorInView:backUpViewController.view];
    }  
}

以下代码的问题是后台线程仍在执行中。

我的问题是,有了线程引用,如何从主线程取消/停止执行/杀死后台线程?

请建议我可能的解决方案。 谢谢。

最佳答案

您的后台线程需要检查它是否已被取消,或者通过 isCancelled 方法...

if ([[NSThread currentThread] isCancelled]) {
    // do cleanup here
    [NSThread exit];
}

您不能从外部终止线程,因为无法知道线程可能处于什么状态,因此,终止它会产生不确定的行为(想象一下,如果线程在分配器中保持互斥锁被杀了……哎哟)。

关于iphone - 如何在IOS中取消/退出/停止线程对象或后台运行的线程的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413955/

相关文章:

ios - 从另一个 UIViewController 刷新表

ios - 使用Xcode 6.2在iPad 1(iOS 5.1.1)上测试应用

iphone - 如何在iOS中自定义搜索键盘?

iphone - 如何通过蓝牙将蓝牙配件连接到iPhone?

iphone - 为什么 Instruments 在此代码中报告内存泄漏?

iphone - 过滤输入到 UITextField 中的字符

objective-c - MPVolumeView 和 iOS 5

iphone - IOS设置方向不起作用

iphone - 如何应用条件以全屏播放视频并在特定帧中播放

objective-c - 同时动画旋转/缩放/平移 UIImage