iOS 啥是RunLoop? RunLoop有啥用?

RunLoop是什么

  1. 顾名思义翻译过来就是 运!行!循!环!
  2. RunLoop实际上是一个对象,这个对象提供了一个入口函数CFRunLoopRun(void)
  3. RunLoop是一个牛逼的do...while死循环

RunLoop的作用什么

1.使程序持续运行
2.节约CPU资源 提高程序性能
3.处理各种事件(触摸、定时器、performSelectord等等)

如何令程序持续运行?

在我们的main.h中,如果main函数retrun 0,那么当运行到return时,程序就会退出。

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return 0;
    }
}

当我们新建一个工程时,main函数会默认返回UIApplicationMainUIApplicationMain会自动创建一个RunLoop:main loop,从而实现不断循环,来令程序持续运行。

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

为什么是个死循环?
typedef CF_ENUM(SInt32, CFRunLoopRunResult) {
    kCFRunLoopRunFinished = 1,
    kCFRunLoopRunStopped = 2,
    kCFRunLoopRunTimedOut = 3,
    kCFRunLoopRunHandledSource = 4
};
 void CFRunLoopRun(void) {   //入口函数
    int32_t result; //创建不赋值,result = nil;
    do {
        result = CFRunLoopRunSpecific(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 1.0e10, false);
        CHECK_FOR_FORK();
    } while (kCFRunLoopRunStopped != result && kCFRunLoopRunFinished != result);
}

只要RunLoop的状态result 不等于kCFRunLoopRunStoppedkCFRunLoopRunFinished就会一直执行下去。
result 等于kCFRunLoopRunStoppedkCFRunLoopRunFinished时,程序就会退出。
所以说是个死循环。

这个死循环牛逼在哪?和一般的死循环的区别在哪?
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));;
    }
}

我们新创建一个工程,main.h一般情况是这样的,程序运行起来时,CPU占用为0%,如下图

CPU占用-RunLoop.png

然后我们换一种方式,自己写一个死循环。

int main(int argc, char * argv[]) {
    @autoreleasepool {
        while(1);
        return 0;
    }
}

再看看CPU占用率

CPU占用-手写死循环.png

很明显,同样是死循环,RunLoop就是这么优秀。
从而验证了RunLoop节约CPU资源,提高程序性能的作用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一. RunLoop简介 运行循环,在程序运行过程中循环做一些事情,如果没有Runloop程序执行完毕就会立即退出...
    666真666阅读 4,057评论 0 6
  • 面试经常会被问到的一些问题: 1.讲讲 RunLoop,项目中有用到吗? 2.RunLoop内部实现逻辑? 3.R...
    __blossom阅读 4,734评论 1 5
  • 一.RunLoop简介 运行循环,在程序运行过程中循环做一些事情,如果没有Runloop程序执行完毕就会立即退出,...
    Jt_Self阅读 2,642评论 0 0
  • 一. RunLoop简介 RunLoop字面意思是跑圈,在我们的项目中其实就是运行循环,而且是充满灵性的死循环,为...
    xx_cc阅读 13,921评论 43 144
  • 姓名:张艳秋 公司:海南蔚蓝时代实业有限公司 组别:第 420 期 乐观一组 (参加培训时的组名) 【日精进打卡第...
    我又不是奥利奥泡什么泡阅读 571评论 0 0

友情链接更多精彩内容