多線程 - 4
RunLoop
常駐的主線程
RunLoop

屏幕快照 2017-11-28 上午7.03.24.png
- 事件響應(yīng)
- 界面更新 //setNeedDisplay/setNeedLayout
- 定時器/延遲執(zhí)行 //NSTimer/CADisplayLink/performSelector/dispatch_after/dispatch_async,后兩個只有在mainqueueu中才會跟runloop有關(guān)系。
- AutoreleasePool
RunLoop的特性
和線程一一對應(yīng),每個線程只有一個runloop
線程創(chuàng)建時并沒有runloop,需要手動創(chuàng)建(主線程除外)
RunLoop的創(chuàng)建發(fā)生在第一次獲取它時
只能在線程內(nèi)部獲取對應(yīng)RunLoop(主線程的Runloop除外)
iOS中的RunLoop
Core Foundation CFRunLoopRef
Foundation NSRunLoop
@interface NSRunLoop : NSObject {
+ (NSRunLoop *)currentRunLoop;
+ (NSRunLoop *)mainRunLoop;
- (void)run;
- (void)runUntilDate:(NSDate *)limitDate;
@end
RunLoop的實際應(yīng)用
常駐的后臺線程
- 將有繁重操作的回調(diào)指定到固定的線程中執(zhí)行
- perform selector 到固定的線程
RunLoop Mode
@interface NSRunLoop : NSObject {
- (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode;
@end
NSDefaultRunLoopMode
default mode
NSRunLoopCommonModes modal mode
tracking mode UITrackingRunLoopMode
總結(jié)
RunLoop 基本概念
RunLoop 特性
RunLoop 使用
RunLoop Mode