博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RunRunLoop初识
阅读量:4338 次
发布时间:2019-06-07

本文共 1748 字,大约阅读时间需要 5 分钟。

一.RunLoop 顾名思义就是一个循环,你的线程在这里开始,并运行事件处理响应输入事件.
RunLoop的作用:
1.保证程序的持续运行
2.处理App中的各种事件,(比如触摸,定时器事件,Selector事件)
3.节约CPU资源,提高程序性能,该做事情的时候做事情,该休息的时候就休息
 
RunLoop在iOS中有二套API
Foundation NSRunLoop
 
*Core Foundation 大部分东西都是C语言的
NSRunLoop 封装了CFRunLoop
 
二.简单介绍RunLoop与线程的关系:
每个线程都有一个与之对应的RunLoop,主线程的RunLoop在程序中是自动创建的,子线程则需要我们自己手动进行创建
 
三.获取RunLoop(准确的说,是获取当前线程的RunLoop)
[NSRunLoop currentRunLoop];
 获取主线程的RunLoop;
[NSRunLoop mainRunLoop];
子线程的RunLoop(这是我们自己手动创建的)默认情况下NSTimer被加入NSDefaultRunLoopMode;
如果想要NSTimer收到组件或者动画影响就添加到NSRunLoopCommonModes:
 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadAction) object:nil];
    [thread start];
四.Mode RunLoop的运行模式
注意:RunLoop是有多种模式的,但是一个RunLoop只能选择一种模式运行,如果想要切换模式,需要退出当前模式.
kCFRunLoopDefaultMode 默认模式 主线程默认模式
UITrackingRunLoopMode 页面跟踪模式
kCFRunLoopCommonModes 占位模式(包含上面二种情况,若把事件添加到此模式下,事件在上面二种模式都可以响应).
 
五.CFRunLoopObserverRef 是观察者 监听RunLoop的状态
     typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
     kCFRunLoopEntry = (1UL << 0),  即将进入RunLoop
     kCFRunLoopBeforeTimers = (1UL << 1),
     kCFRunLoopBeforeSources = (1UL << 2),
     kCFRunLoopBeforeWaiting = (1UL << 5), 休眠之前
     kCFRunLoopAfterWaiting = (1UL << 6),
     kCFRunLoopExit = (1UL << 7),
     kCFRunLoopAllActivities = 0x0FFFFFFFU
     };
 
     创建observer
    CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        NSLog(@"----监听到RunLoop状态发生改变---%zd", activity);
    });
   
    添加观察者:监听RunLoop的状态
    CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);
   
    释放Observer
    CFRelease(observer);
   
     Core Foundation内存管理
     * 遇到Creat copy retain 等创建变量 需要对变量进行内存管理
     *在使用完之后 对其进行Release 调用CFRelease(释放的变量)
    
 

转载于:https://www.cnblogs.com/LzwBlog/p/5388568.html

你可能感兴趣的文章
EF查询数据库框架的搭建
查看>>
Python能干嘛?
查看>>
引擎渲染速度测试--我js代码写得少你不要骗我
查看>>
每日一小练——支配值数目
查看>>
bbed初体验
查看>>
C#委托与事件讲解大结局
查看>>
CSS基础学习目录
查看>>
JavaScript学习03 JS函数
查看>>
signal信号类型列表
查看>>
iptables之五iptables之nat
查看>>
redhat openshift 跳转
查看>>
10.24饮食
查看>>
洛谷U36590搬书
查看>>
游戏项目一笔记
查看>>
Android入门(二):Android工程目录结构
查看>>
k8s--yml文件
查看>>
拆分json格式数组
查看>>
C语言第三次博客作业---单层循环结构
查看>>
python 最小二乘 leastsq 函数实现 法线式 解决与x轴垂直问题
查看>>
20135234mqy-——信息安全系统设计基础第十四周学习总结
查看>>