主线程卡死

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

帮助:感激师傅的提点。

方法:

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

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


问题找到了:

我把dispatch_async写成了同步的dispatch_sync。

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

推荐写法:

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

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

} else {

dispatch_async(...);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 1,777评论 0 17
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,820评论 1 17
  • 一、多线程简介: 所谓多线程是指一个 进程 -- process(可以理解为系统中正在运行的一个应用程序)中可以开...
    寻形觅影阅读 1,068评论 0 6
  • #import "ViewController.h" @interface ViewController () @...
    艾克12138阅读 266评论 0 0
  • 最近新生报到的日子,回想起去年的这会,我和他们一样,怀揣着对大学的向往和自己的满腔热血,希望在大学里干自己想干的事...
    远处的海眼前的你阅读 269评论 0 1