多線程 - 4
RunLoop
常駐的主線程
RunLoop
- 事件響應(yīng)
- 界面更新 //setNeedDisplay/setNeedLayout
- 定時(shí)器/延遲執(zhí)行 //NSTimer/CADisplayLink/performSelector/dispatch_after/dispatch_async,后兩個(gè)只有在mainqueueu中才會(huì)跟runloop有關(guān)系。
- AutoreleasePool
RunLoop的特性
和線程一一對(duì)應(yīng)奶赠,每個(gè)線程只有一個(gè)runloop
線程創(chuàng)建時(shí)并沒(méi)有runloop,需要手動(dòng)創(chuàng)建(主線程除外)
RunLoop的創(chuàng)建發(fā)生在第一次獲取它時(shí)
只能在線程內(nèi)部獲取對(duì)應(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的實(shí)際應(yīng)用
常駐的后臺(tái)線程
- 將有繁重操作的回調(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