运行循环: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);
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);
本文详细介绍了RunLoop的概念及作用,包括其在不同模式下如何监听各种事件,如触摸、时钟及网络事件,并探讨了RunLoop的特性、注意事项及其在iOS开发中的应用。此外,还深入解析了时钟操作中的同步问题及可能导致的界面卡顿现象。
1703

被折叠的 条评论
为什么被折叠?



