iOS-RunLoop

2017-09-21  本文已影响23人  天外丶飞仙

现在对iOS开发者要求越来越高,RunLoop其实在开发中很少会用到但是也需要我们去了解。

RunLoop简单介绍

RunLoop其实就是一个简单的运行循环,保持程序的持续运行,处理App各种事件(比如触摸事件,定时事件,Selector事件),RunLoop的一个特性是该做事的时候做事,该休息的时候休息。这样可以节省CPU资源,提高程序性能。


RunLoop处理逻辑.png

RunLoop的类

RunLoop对象

iOS有2套API来访问RunLoop:

RunLoop与线程

RunLoop和线程是一一对应的,主线程的runloop已经默认是开启的,但是子线程的需要手动开启。

//获取runloop
NSRunLoop *currentRunloop = [NSRunLoop currentRunLoop];
//开启runloop
[currentRunloop run];//这里开启的条件是需要给RunLoop添加一个Source或Timer。

RunLoop的观察者

添加观察者能够监控RunLoop状态的改变

//1.创建监听者
    /*
     第一个参数:怎么分配存储空间
     第二个参数:要监听的状态 kCFRunLoopAllActivities 所有的状态
     第三个参数:时候持续监听
     第四个参数:优先级 总是传0
     第五个参数:当状态改变时候的回调
     */
 CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        //activity表示不同的状态
         kCFRunLoopEntry =  即将进入runloop
         kCFRunLoopBeforeTimers = 即将处理timer事件
         kCFRunLoopBeforeSources = 即将处理source事件
         kCFRunLoopBeforeWaiting = 即将进入睡眠
         kCFRunLoopAfterWaiting = 被唤醒
         kCFRunLoopExit = runloop退出
         kCFRunLoopAllActivities 
 });
//添加观察者
/*
 第一个参数:要监听哪个runloop
 第二个参数:观察者
 第三个参数:运行模式
 */
CFRunLoopAddObserver(CFRunLoopGetCurrent(),observer, kCFRunLoopDefaultMode);

RunLoop的应用场景

上一篇 下一篇

猜你喜欢

热点阅读