场景:不知道为什么主线程卡住了,感觉整个流程没问题。不知道怎么找错误
帮助:感激师傅的提点。
方法:
如果遇到主线程卡死,工程不会崩溃,只是主线程停滞(不知道处理什么,无法选择)。这时候程序依旧在运行。点击下面的暂停按钮:
左边信息提示栏会出现线程的执行情况,你点击第一个用户线程看看是否问题出在这里:
问题找到了:
我把dispatch_async写成了同步的dispatch_sync。
当前程序正在主线程执行,强行把其它操作推倒主线程中让它执行,可是它一次只能做一件事,这样就会导致他无法选择,也就是卡死了。如果使用dispatch_async的话,主线程会把当前的任务执行完,然后在处理推进去的操作。
推荐写法:
if([NSThread isMainThread]) {//judge the thread
//what you want to do in main thread...
} else {
dispatch_async(...);
}
网友评论