首页 > 其他 > 详细

1.RunLoop

时间:2019-12-03 16:51:10      阅读:68      评论:0      收藏:0      [点我收藏+]

      第一篇学习就从这里开始吧。

      从这个阶段开始,真的需要程序员开始背概念,不能只写代码,考虑实现,更多的要开始学会从底层开始学习,我醒悟的时间太短了,导致四年的时间可能大部分都浪费了。每周深入研究一个课题,一年之后你会完全不一样的,这是一个iOS架构师朋友给我的诚恳建议,拿出来给大家分享,就算工作时间很忙,也要坚持这件事情。

      Runloop是面试中几乎必问的问题了,我在曾经的开发中有简易使用为了优化项目,但是从来没有背过什么基础概念,其实这个是不对的想法,程序员依然需要背,是为了在进阶道路上能随时想到解决方案,提高问题应对的敏感度。这篇是参考很多的资料,加上自己使用过程中的理解,按照自己的思路和顺序来总结的,如果有朋友觉得可以参考,记得看完之后一定要按照自己的想法重新总结,别人的和自己的永远都有区别,而且别人的东西不太容易背~啊哈哈。

      

    1.什么是runloop

    Runloop是线程相关的基础框架的一部分,作用是可以让线程常驻,让线程在有工作的时候忙,在没有工作的时候处于休眠状态。内部是do-while循环,判断source1是否有任务,如果没有任务,线程会进入休眠,判断runloop中是否有item,如果没有,会通知observer推出loop。

   2.runloop和线程的关系

   runloop和线程是紧密相连的,runloop如果没有线程,就失去了存在的意义(runloop和线程是否是一一对应的?)。每个线程包括主线程,都有与之相对应的runloop对象。主线程的runloop是默认启动的,UIApplicationMain()函数内部会为mainthread设置一个NSRunLoop对象,可以让我们的应用在无人操作的时候休息,需要干活的时候可以随时响应。对于其他线程来说,runloop是没有启动的,如果更多的线程runloop交互可以手动配置和启动,如果线程只是执行一个长时间已确定的任务,则不需要常驻线程,也就不需要启动和配置runloop。

   3.runloop对外接口

  CoreFoundation里面关于Runloop有5类:

  CFRunLoopRef    //runloop对象

  CFRunLoopModeRef    //runloop场景

  CFRunLoopSourceRef   //runloop的source类

  CFRunLoopTimerRef    //runloop的timer类

  CFRunLoopObserverRef  //runloop的观察者

  一个RunLoop包含若干个Mode,CFRunLoopModeRef类没有对外暴漏,直通过CFRunLoopRef的接口进行了封装。每次调用RunLoop的主函数时,只能指定其中一个currentMode。如果需要切换mode,只能退出loop,重新指定一个mode进入,主要是为了分隔开不同组的item,让其互不影响。

  CFRunLoopTimerRef是基于时间的触发器,它和NSTimer是toll-free bridged的(某些数据类型是可以在CoreFoundation和Foundation里互换的,详细了解https://blog.csdn.net/quanqinyang/article/details/38679167),

    

  

1.RunLoop

原文:https://www.cnblogs.com/SimonDonne93/p/11977366.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!