91- 运行循环:RunLoop

 运行循环:RunLoop

1.作用:
1>保证程序不会退出
2>监听所有事件:触摸、时钟、网络事件

2.特性:
1>如果没有任何事件发生,会进入休眠状态(省电)
2>一旦监听到事件,会立即循环
3>每一个线程都有一个 runloop,但是只有主线程的 runloop 会默认启动

3.注意:
1>runloop是在iOS开发的原始时代,需要大量使用
2>运行循环在 iOS 开发中几乎不用,但是要理解概念和原理

4.运行循环模式:
1>NSDelaultRunLoopModel
默认的运行循环模式:监听时钟、网络等跟UI无关的事件

2>NSRunLoopCommonModes
通用的运行循环模式:监听用户交互事件,优先级最高,保证用户一旦交互,立即做出响应。

5.时钟操作:
1>注意
one :时钟触发方法是同步的,没有开启线程
two: 时钟触发方法的中,不能有太耗时的操作,否则会造成卡顿

6.运行循环最重要特性:
每一个线程都有一个 runloop,但是只有主线程的 runloop 会默认启动,子线程如果要监听事件,需要手动开启子线程的运行循环

7.手动开启子线程的运行循环方式

1> run
是真正的死循环,启动运行循环就不会在执行后续代码
如果用 run 直接启动运行循环,很难停掉循环,线程永远不会被停止
[[
NSRunLoop   currentRunLoop run ];

2>通过OC停止运行循环
one: 手写死循环,定义 bool 变量, 性能不好
self .finished = NO ;
//手写一个死循环
while  (! self . finished ) {
    
     //让运行循环监听0.1s的事件
    [[ NSRunLoop   currentRunLoop ]   runMode : NSDefaultRunLoopMode   beforeDate :[ NSDate   dateWithTimeIntervalSinceNow : 0.1 ]];
}
two: 停止运行循环
self .finished = YES ;

3>使用 CoreFoundation (C语言框架),停止运行循环
one: 定义CFRunLoopRef类型的成员变量:表示时钟线程所在的运行循环
@property  ( nonatomic , assign ) CFRunLoopRef timerRunLoop;

two: 启动运行循环
利用底层方式启动运行循环,不用程序员在手写
while 死循环 ,可以利用 runloop本身的特性
没有事件自动休眠
self .timerRunLoop =CFRunLoopGetCurrent();

three: 让时钟所在的运行循环停止
CFRunLoopStop(
self .timerRunLoop);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值