美文网首页
RunLoop -- 概念

RunLoop -- 概念

作者: 踩坑小分队 | 来源:发表于2020-04-11 21:22 被阅读0次

    RunLoop

    如果没有RunLoop,程序运行起来,执行完相关东西加结束了

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // insert code here...
            NSLog(@"Hello, World!");
        }
        return 0;
    }
    

    如果有RunLoop,程序运行起来之后,不会挂,会一直等待指令的输入,然后处理
    伪代码:

    int main(int argc, char * argv[]) {
        
        @autoreleasepool {
            int retValue = 0;
            do {
                // 睡眠中等待消息
                int message = sleepAndWait();
                // 收到消息干活
                retValue = processMessage(message)
            } while (retValue == 0);
        }
        return 0;
    }
    
    作用
    • 保持程序的持续运行
    • 处理运行中的各种事件<触摸,定时等>
    • 节省CPU的资源,该干活的时候干活,该休息的时候休息
    应用:
    • 定时器(Timer),PerformSelector
    • GCD线程
    • 事件响应,手势识别,界面刷新
    • AutoreleasePool,自动释放池
    RunLoop对象

    iOS中有2套访问RunLoop的对象
    Foundation 框架:NSRunLoop对象
    Core Foundation:CFRunLoopRef

    NSRunLoop和CFRunLoopRef都代表着RunLoop对象.
    NSRunLoop对象是基于CFRunLoopRef的一层OC的包装

    CFRunLoopRef有开源的代码<新建一个空项目,将内容添加到项目中查看>
    CFRunLoopRef源码地址


    image.png

    相关文章

      网友评论

          本文标题:RunLoop -- 概念

          本文链接:https://www.haomeiwen.com/subject/tokrehtx.html