面试iOS面试知识点收集首页投稿(暂停使用,暂停投稿)

浅谈iOS中RunLoop的使用及原理

2016-08-21  本文已影响608人  阿拉斯加的狗

什么是RunLoop

从字面意思看

运行循环
Paste_Image.png

跑圈

基本作用
如果没有RunLoop


int main(int argc, char * argv[]) {
    NSLog(@"execute main function");
    return 0;
}
如果有了RunLoop

int main(int argc, char * argv[]) {
    BOOL running = YES;
    do {
        // 执行各种任务,处理各种事件
             // ......
    } while (running);
    return 0;
}
main函数中的RunLoop
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

RunLoop对象

苹果官方文档

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

CFRunLoopRef是开源的

http://opensource.apple.com/source/CF/CF-1151.16/

RunLoop与线程
获得RunLoop对象
Foundation

[NSRunLoop currentRunLoop]; // 获得当前线程的RunLoop对象
[NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象

Core Foundation

CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象
CFRunLoopGetMain(); // 获得主线程的RunLoop对象
RunLoop相关类
Paste_Image.png
CFRunLoopModeRef
CFRunLoopModeRef
CFRunLoopSourceRef
CFRunLoopTimerRef
CFRunLoopObserverRef
Paste_Image.png

RunLoop处理逻辑-官方版

Paste_Image.png Paste_Image.png

RunLoop处理逻辑-网友整理版

Paste_Image.png
上一篇 下一篇

猜你喜欢

热点阅读