由于最近各种原因,又全面的理解了一下Runloop的相关知识,通过记录的形式来加深一下理解。

      Runloop简单理解就是iOS中通过一种死循环方式让程序持续处理用户操作,调度事件处理时间,通过mach_msg()让Runloop闲置时进入trap状态,节省CPU资源。

      关于Runloop有基于Core Fundation的纯C的CFRunloop和基于Foundation的OC封装的NSRunloop。下图是CFRunloop相关的5各类,以及简单的描述。

Runloop一点总结

       通过下图左图可以理解Runloop与Mode的关系,以及Mode中的内容;右图则是通过简单的流程来描述Runloop的处理逻辑流程。

Runloop一点总结

最后通过简单的理解Runloop后,总结了一下Runloop在我们现实项目中的几个常用场景;
1、NSTimer的加入Runloop中不同Mode问题
2、通过CFRunLoopAddObserver在子线程观察主线线程的Runloop,从而达到检测主线程卡顿问题
3、常驻线程:给子线程开启一个Runloop,让子线程一直活着(参考AF)
4、使用perfromSelector在默认模式下设置图片,防止UITableView滚动卡顿 (performSelector:@selector(selector) withObject:nil afterDelay:0 inModes:@[NSDefaultRunLoopMode])

参考:http://www.jianshu.com/p/b9426458fcf6
https://www.cnblogs.com/kenshincui/p/6823841.html

相关文章: