我在UIview中在后台启动了一个线程,在我离开视图后线程会发生什么?

时间:2009-12-21 03:39:11

标签: thread-safety

我在UIview中启动了一个线程,作为后台线程传输视图的数据。但是,崩溃发生在这种情况下:当我在线程尝试传输数据的时候离开视图。

我对UIview对象和线程之间的关系并不十分清楚。我猜它崩溃是因为线程试图访问UIview成员或方法,这些不再存在。所以,我想知道线程发生了什么,如果分离它的UIView已经离开了。

这是我的分离代码:

- (void)reloadData {
    isLoaded = NO; //UIView member.
    [NSThread detachNewThreadSelector:@selector(getThreadInAnotherThread) toTarget:self withObject:nil];
}


- (void)getThreadInAnotherThread {
             //Loading code
             isLoaded = YES;
    [self performSelectorOnMainThread:@selector(reloadTable) withObject:nil waitUntilDone:YES]; 
}

我在viewDidDisappear中没有做任何事情。

2 个答案:

答案 0 :(得分:1)

作为detachNewThreadSelector的文档:toTarget:withObject states:

  

在执行分离线程期间保留对象aTarget和anArgument,然后释放。

对于performSelectorOnMainThread:withObject:waitUntilDone:

  

此方法保留接收器和arg参数,直到执行选择器之后。

如果仍然不清楚这里发生了什么,请参阅可可内存管理指南。

答案 1 :(得分:0)

视图和线程之间没有任何关系,除非你自己放一个。