要监听RunLoop的状态从NSRunLoop中获取不到任何与Observer相关的信息,更不用说监听了.这时候就需要从CFRunLoopRef入手了.(这边我们监听的是主线程的RunLoop,监听RunLoop的状态变化可以用于优化程序,比如表格要加载大量数据,图片,处理耗时操作,会造成UI卡顿,这时就可以利用监听RunLoop,在他休眠时唤醒它去处理这些任务,例子这边就不举了😘)
点击CFRunLoopRef到API中发现定义了Observer的相关声明CFRunLoopObserverRef,这正是我们想要的😘:
|
|
找到了CFRunLoopObserverRef之后就是要创建一个Observer了,在API中找到如下函数声明:
|
|
这正是我们想要的创建OBserver的方法😘,看看它需要的参数:
CFAllocatorRef allocator 这个鼠标函数的时候Xcode右边解释了一堆(暂时母鸡他的用法)
CFOptionFlags activities 表示要监听RunLoop的变化的状态(kCFRunLoopAfterWaiting等)
Boolean repeats//表示是否重复监听
CFIndex order 这个传0即可暂时没研究
CFRunLoopObserverCallBack callout 表示监听的回调方法(C语言的方法)
CFRunLoopObserverContext *context 表示上下文环境,用于C语言的方法与OC的互传传值
既然如此现在来创建一个CFRunLoopObserverContext,在API中也找到一个CFRunLoopObserverContext的声明
|
|
现在创建一个CFRunLoopObserverContext
|
|
点击上面的CFRunLoopObserverCallBack是API跳到这样的一个声明,即告诉我们监听的回调方法的参数怎么定义
|
|
接下来新建一个C语言用于回调方法
|
|
到这边万事俱备了😘,可以创建observer了
|
|
到此结束😘,完整代码如下:
为了让RunLoop一直工作,这边添加了一个NSTimer,不过他什么都没做,只是为了让RunLoop一直工作
|
|