多线程 - 4
RunLoop
常驻的主线程
RunLoop
屏幕快照 2017-07-19 上午3.37.11.png
- 事件响应
- 界面更新 //setNeedDisplay/setNeedLayout
- 定时器/延迟执行 //NSTimer/CADisplayLink/performSelector/dispatch_after/dispatch_async,后两个只有在mainqueueu中才会跟runloop有关系。
- AutoreleasePool
RunLoop的特性
和线程一一对应,每个线程只有一个runloop
线程创建时并没有runloop,需要手动创建(主线程除外)
RunLoop的创建发生在第一次获取它时
只能在线程内部获取对应RunLoop(主线程的Runloop除外)
iOS中的RunLoop
Core Foundation CFRunLoopRef
Foundation NSRunLoop
@interface NSRunLoop : NSObject {
+ (NSRunLoop *)currentRunLoop;
+ (NSRunLoop *)mainRunLoop;
- (void)run;
- (void)runUntilDate:(NSDate *)limitDate;
@end
RunLoop的实际应用
常驻的后台线程
- 将有繁重操作的回调指定到固定的线程中执行
- perform selector 到固定的线程
RunLoop Mode
@interface NSRunLoop : NSObject {
- (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode;
@end
NSDefaultRunLoopMode
default mode
NSRunLoopCommonModes modal mode
tracking mode UITrackingRunLoopMode
总结
RunLoop 基本概念
RunLoop 特性
RunLoop 使用
RunLoop Mode