多线程 - RunLoop

多线程 - 4

RunLoop

常驻的主线程

RunLoop

多线程 - RunLoop_第1张图片
屏幕快照 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

你可能感兴趣的:(多线程 - RunLoop)