2009-12-21 18 views
0

我作为后台线程在UIview中启动了一个线程,该线程为视图传输数据。然而,在这种情况下会发生崩溃:当我在线程尝试传输数据的时候离开视图。我在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做任何事情。

回答

0

视图和线程之间没有关系,除非你自己把它放在那里。

+0

那么,如果我离开了UIview,线程仍然试图访问它的成员,它会崩溃?在我离开后,UIview何时发布? – user268743 2009-12-21 04:38:40

1

至于detachNewThreadSelector的文档:toTarget:withObject规定:

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

与同为performSelectorOnMainThread:withObject:waitUntilDone:

这种方法保留了接收机和arg参数进行选择之后,直至。

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

+0

谢谢!我知道了。 – user268743 2009-12-22 08:30:02

相关问题