RunLoop基本功能

1.保持程序的持续运行,比如iOS中,如果没有RunLoop,程序一启动执行完main函数就会挂掉

int main(int argc, char * argv[]) {
    @autoreleasepool {
        // RunLoop
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

3.节省CPU资源,提高程序性能,该做事时做事,该休息时候休息 如果App不处理任何事件,比如只是打开了App,不点击任何按钮,不拖动视图等操作,RunLoop就会让App进入休眠状态

RunLoop对象

iOS中又2套API来访问和使用RunLoop

Foundation : NSRunLoop
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
Core Foundation : CFRunLoopRef
CFRunLoopRef runloop2 = CFRunLoopGetCurrent();

NSRunLoopCFRunLoopRef都代表着RunLoop对象 NSRunLoop是基于CFRunLoopRef的一层Objective-C包装

RunLoop与线程

打印函数调用栈lldb指令bt,就可以查看省略掉的函数

self.view.backgroundColor = [UIColor redColor];

代码执行到这行,并不是马上刷新界面,而是要等到RunLoop的observer的监听到要beforeWaiting即将睡眠之前进行UI的刷新