二级线程

时间:2010-12-29 12:08:31

标签: iphone ios nsthread nsrunloop

我的应用程序中有一个主线程和一个辅助线程。众所周知的主要线程正在被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];

}

1 个答案:

答案 0 :(得分:2)

一般来说,如果你运行一个后台线程,这意味着你有一个Run循环,它在while语句中有效。你应该有一个标志来停止运行循环。这样它就会将线程的状态转换为完成。

while (mRunLoop && [mLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

这就是我的方式。另请阅读此评论中的Post及其子帖子。祝你好运!