项目中一个UIViewController内使用异步线程,异步线程未执行完时pop退出此画面,程序crash。控制台打出错误如下:
Tried to obtain the web lock from a thread other than the main thread...
经调查,发现是由于UIViewController的release方法没有在主线程中调用造成的crash,修改方法如下:
- (oneway void) release {
if (![NSThread isMainThread]) {
[self performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
} else {
[super release];
}
}
添加以上代码到UIViewController中,当不在主线程中执行release时,强行回到主线程中执行。

本文详细解释了在iOS开发中,当UIViewController内部使用异步线程执行任务时,在任务未完成前尝试退出该视图控制器所导致的crash问题。通过引入特定的release方法实现机制,确保所有资源在正确线程中释放,避免crash。同时,提供了具体代码实现和案例分析,帮助开发者理解和应用这一解决方案。
2621

被折叠的 条评论
为什么被折叠?



