Boo*_*oon 5 multithreading objective-c nsrunloop ios
主线程及其runloop中的代码如何交互?例如,主线程中的所有代码是否必须运行,直到它在进入runloop之前处于空闲状态?或者runloop在主线程中执行代码的过程中检查其源代码?runloop源是否有可能阻止主线程代码执行(因为它在同一个线程上运行)?
我试图理解主要线程代码如何适应在宏观方案中的runloop图片(反之亦然).
这是一个runloop与我们的代码一起的样子:
主线程:
- runloop以特定间隔运行
- runloop完成运行,我们的代码运行
- 我们的代码运行完毕,转到(1)(如果我们的代码运行得太久以至于runloop没有机会运行怎么办?)
您询问:
主线程及其runloop中的代码如何交互?
主runloop只是在主线程上执行的循环.
如果我们的代码运行得太长以至于runloop没有机会运行怎么办?
如果你阻塞主线程(即你同步做一些非常慢的事情)那么调用你的代码并等待你返回的runloop将没有机会继续循环,因此一切都依赖于它(定时器) ,来源,用户界面等)似乎会冻结.
这就是为什么,如果你有任何需要花费超过几毫秒的任务,你应该将它发送到一些后台队列,并将它从主线程中取出,因此主线程上的代码可以立即返回到运行循环并确保主线程未被阻止.这将确保主runloop可以继续操作并产生响应UI.
就你描述runloop如何工作的三个方面而言,我可能会有不同的描述.这不是runloop"结束"然后你的代码运行.实际上,runloop是循环的,处理各种系统事件(例如UI,定时器等),并且在处理它们的过程中,它可能最终调用你的代码(在这种情况下整个主线程,包括runloop) ,阻止继续进行,直到您的代码返回到runloop).
| 归档时间: |
|
| 查看次数: |
2221 次 |
| 最近记录: |