我的应用程序中有一个主线程和一个辅助线程。众所周知的主要线程正在被UI使用。我使用辅助线程来做我的视图的后台加载。 我有一个主控制器,我称之为虚拟控制器。从那里我打电话给我的主控制器,它是横向模式。
所以基本上我要做的是,当我旋转我的虚拟控制器时,我希望能够加载我的主景观控制器,反之亦然。
当我从虚拟旋转到主旋律时,一切正常。 main有一系列子控制器要加载,所以我把这个进程放在一个辅助线程上,到那时他们正在加载我显示一个加载器屏幕。
虚拟对象是普通视图控制器,主要是模态视图控制器。
现在问题。
如果用户试图旋转表单虚拟 - > main,主视图控制器初始化的旋转方法。但由于某种原因,用户改变了主意并且从主要方向旋转回来 - >虚拟理想,过渡应该是平滑的,因为UI线程(主要是那里)是免费的。 UI会旋转回来。但是,由于主控制器上的辅助线程仍处于打开状态,即使在主线程上调用主控制器上的解除模态控制器之后,当我们调用willRotate函数时也是如此。
我在各种帖子中读到,我们不能简单地杀死辅助线程,因为我们必须自己清理东西。所以任何人都可以引导我通过代码,我如何杀死我的辅助线程,并在我转回我的呼叫形式之前清理。?? 它有点迫切...请不要指向其他线程主题,因为我已经访问过那些。
我特别想知道如何停止我的辅助线程,而不会导致崩溃。 感谢。
-(void)viewDidLoad {
[super viewDidLoad];
workingThread = [[NSThread alloc]initWithTarget:self selector:@selector(parseMainTextFile) object:nil];
[workingThread start];
[NSThread detachNewThreadSelector:@selector(addLoader) toTarget:self withObject:nil];
//[self performSelectorOnMainThread:@selector(parseMainMatchTextFile) withObject:nil waitUntilDone:NO];
}
答案 0 :(得分:2)
一般来说,如果你运行一个后台线程,这意味着你有一个Run循环,它在while语句中有效。你应该有一个标志来停止运行循环。这样它就会将线程的状态转换为完成。
while (mRunLoop && [mLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
这就是我的方式。另请阅读此评论中的Post及其子帖子。祝你好运!