我在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 :(得分:1)
作为detachNewThreadSelector的文档:toTarget:withObject states:
在执行分离线程期间保留对象aTarget和anArgument,然后释放。
对于performSelectorOnMainThread:withObject:waitUntilDone:
此方法保留接收器和arg参数,直到执行选择器之后。
如果仍然不清楚这里发生了什么,请参阅可可内存管理指南。
答案 1 :(得分:0)
视图和线程之间没有任何关系,除非你自己放一个。