主线程卡死

场景:不知道为什么主线程卡住了,感觉整个流程没问题。不知道怎么找错误

帮助:感激师傅的提点。

方法:

如果遇到主线程卡死,工程不会崩溃,只是主线程停滞(不知道处理什么,无法选择)。这时候程序依旧在运行。点击下面的暂停按钮:

主线程卡死_第1张图片

左边信息提示栏会出现线程的执行情况,你点击第一个用户线程看看是否问题出在这里:


主线程卡死_第2张图片

问题找到了:

主线程卡死_第3张图片

我把dispatch_async写成了同步的dispatch_sync。

当前程序正在主线程执行,强行把其它操作推倒主线程中让它执行,可是它一次只能做一件事,这样就会导致他无法选择,也就是卡死了。如果使用dispatch_async的话,主线程会把当前的任务执行完,然后在处理推进去的操作。

推荐写法:

if([NSThread isMainThread]) {//judge the thread

//what you want to do in main thread...

} else {

dispatch_async(...);

}

你可能感兴趣的:(主线程卡死)