1.NSRunLoop 相似于do()while{} 保证应用程序不被关闭
ios 中runLopp 两种方式
1: NSRunLoop (oc) 2:CFRunLoop (c语言)
NSRunLoop 五种模式
1:KCFRunLoopDefaultMode 默认mode 主线程是在该mode下运行的
2:UITrackingRunLoopMode 界面跟踪mode 用于scrollerview触摸滑动,保证界面滑动时 不受其它mode的影响
3:UIIntializationRunLoopMode 在刚启动app用的第一个mode 启动完后就不再使用
4:GSEventReceiveRunLoopMode 接受系统内部事件mode 不常用
5:KCFRunLoopCommonModes 不是一个真正的mode 是一个占位用的mode包含(1,2)两种
NSTimer 初始化两种方式
1: NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:<#(NSTimeInterval)#> target:<#(nonnull id)#> selector:<#(nonnull SEL)#> userInfo:<#(nullable id)#> repeats:<#(BOOL)#> 该方式创建时默认加到一个runLoop中 也就是相当于mainRunLoop中 当进行触摸滑动时会停止运行 原因:当触摸滑动时系统会自动切换到mainmode, runloop只要同时接受一种mode
2: NSTimer *timer = [NSTimer timerWithTimeInterval:<#(NSTimeInterval)#> target:<#(nonnull id)#> selector:<#(nonnull SEL)#> userInfo:<#(nullable id)#> repeats:<#(BOOL)#>]
该方式没有加入runloop 将不会自动启动 需手动加入到runloop中 第5种模式下可同时在(1,2)时周时运行
-------------------RunLoop相关类-----------------
1.CFRunLoopSourceRef 是事件源 也可称为输入源 按官方文档可分为三类:
i: Port-Based Sources 从其它线程或内核发出的
ii: Custom Input Sources 自定义的
iii: Cocoa PerForm Selector Sources 线程通信时