美文网首页
RunLoop知识总结

RunLoop知识总结

作者: 逗憨de逗 | 来源:发表于2018-07-26 14:14 被阅读7次

    1.runloop的基本作用

    • 保持程序的持续运行
    • 处理App中的各种事件(比如触摸事件、定时事件、Selector事件)
    • 节约CPU资源,提高程序性能,该做事时做事,该休息时休息

    2.main文件对runloop的应用
    UIApplicationMain 函数内部就启动了一个跟主线程相关联的RunLoop,所以UIApplicationMain函数一直没有返回,保持了程序的持续运行

    3.有2套API来访问和使用RunLoop

    • Foundation ———— NSRunLoop
    • Core Foundation ———— CFRunLoopRef

    4.runloop与线程
    每条线程都有唯一的一个与之对应的runloop对象。
    主线程的runloop已经自动创建好了,子线程的runloop需要主动创建
    runloop在第一次获取时创建,在线程结束时销毁

    • [NSRunLoop currentRunLoop]; //获取当前线程的runloop
    • [NSRunLoop mainRunLoop];

    5.runloop的 5个相关类:
    CFRunLoopRef
    CFRunLoopModeRef
    CFRunLoopSourceRef
    CFRunLoopTimerRef
    CFRunLoopObserverRef

    • CFRunLoopModeRef
      代表runloop的运行模式,每次runloop启动时,只能指定其中一个mode,currentMode
      系统默认注册了5个mode,常用的是以下2个。
      KCFRunLoopDefaultMode: App的默认Mode,通常主线程是在这个Mode下运行
      UITrackingRunLoopMode: 界面跟踪mode,用于ScrollView追踪触摸滑动,保证界面滑动时不受其他mode的影响。
      NSRunLoopCommonModes :是一个标记

    • CFRunLoopTimerRef



      只是在KCFRunLoopDefaultMode状态下添加了NSTimer,其他模式下将不会调用show方法,导致所谓的“不准确”。故可以使用NSRunLoopCommonModes来替换,可以使任何模式下都能调用show方法。

    通过GCD创建定时器:



    • CFRunLoopSourceRef
      是事件源(输入源)
      source0: 非基于port的,用于用户主动触发的事件
      source1:基于port的,通过内核和其它线程相互发送消息
    • CFRunLoopObserverRef
      监听runloop的状态



    6.CF的内存管理
    凡是带有create,copy,retain等字眼的函数,创建出来的对象,都需要在最后做一次release

    7.runloop的内部处理逻辑


    8.runloop的应用

    • NSTimer
    • imageView展示
    • performSelector


    • 常驻线程



    • 自动释放池
      runloop中的自动释放池什么时候创建和释放:
      第一次创建:第一次进入runloop的时候
      最后一次释放:runloop退出的时候
      其他情况:
      当runloop将要睡觉的时候会释放,并创建一个新的释放池

    相关文章

      网友评论

          本文标题:RunLoop知识总结

          本文链接:https://www.haomeiwen.com/subject/jzkbmftx.html