多线程 RunLoop

187 阅读1分钟

多线程 - 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