RunLoop---未完待续

2018-06-21  本文已影响0人  帅狗黑皮668

项目中的main.m

在几乎所有的程序开发中程序一般都是从main函数开始运行的,那么IOS程序也不例外,在用Xcode新建工程的时候回为我们自动生成了一个main.m文件:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

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

这个方法有四个参数:

main函数为什么能保持不退出:
main函数中调用UIApplicationMain内部会启动一个主线程的RunLoop,RunLoop是对事件循环的维护机制,可以在有事做的时候做事,没事做的时候通过用户态到内核态的切换,使得当前线程处于休眠状态避免资源占用。

定义

RunLoop是通过内部维护的事件循环来对事件/消息进行管理的一个对象。

什么是事件循环

  1. 没有消息需要处理时,休眠以避免资源占用。由用户态转变为内核态
  2. 有消息需要处理时,立即被唤醒。由内核态转变为用户态

数据结构

NSRunLoop是对CFRunLoop的封装,提供了面向对象的API。

上一篇 下一篇

猜你喜欢

热点阅读