消息循环NSRunLoop
来源:互联网 发布:qq赚钱软件 编辑:程序博客网 时间:2024/06/06 12:48
NSRunLoop (消息循环)
RunLoop就是消息循环,每一个线程内部都有一个消息循环。
只有主线程的消息循环默认开启,子线程的消息循环默认不开启。
NSRunLoop的作用
1,保证程序不退出
2.负责处理输入事件
3.如果没有事件发生.会让程序进入休眠状态
事件源 : input Sources 输入源
Timer Source 定时源
消息循环使用
1.创建输入源(定时源)
2.指定事件源再循环中运行的模式.并加入循环
//创建时间源 NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(task) userInfo:nil repeats:YES]; //定时源加到消息循环中去 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];循环的模式 (只有当消息模式 与循环的模式 匹配的时候,消息运行) // NSDefaultRunLoopMode 默认模式下,拖动界面,计时器停止 最常用的循环模式 // NSRunLoopCommonModes 多模式的状态,拖动界面,不影响计时器工作 一组模式的集合 // 消息循环时模式 // kCFRunLoopDefaultMode 定时器工作的模式(默认模式) // UITrackingRunLoopMode 拖动界面时的模式
1.创建消息
2.把消息放入循环,并指定消息运行的模式
3.在与循环的模式匹配的时候,消息运行
特点:子线程默认不开启消息循环,主线程默认开启消息循环。
子线程的 RunLoop默认是不开启的,而且不可以轻易开启,如果开启会形成死循环,然后不停地检测是否有事件发生,因此开启子线程的消息循环之后一定要关闭,防止程序挂掉,
子线程中的消息循环
//开启子线程的消息循环 //第一种方法 .无法停止 // [[NSRunLoop currentRunLoop] run]; //第二种方法 .制定循环运行时间, [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]]; //第三种方式 推荐方式 //将shouldKeepRunning定义为全局的变量,并且设置为NO // BOOL shouldKeepRunning = YES; // global NSRunLoop *theRL = [NSRunLoop currentRunLoop]; NSLog(@"%d", shouldKeepRunning); while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
NSRunloop与autorelease pool
在主线程消息循环开始的时候创建自动释放池,在消息循环结束的时候,销毁释放池,
在循环过程中创建的临时对象,会自动添加到释放池中,在循环结束后会向池中所有对象发送 release 消息,释放所有 autorelease 对象,以减少内存消耗;
NSThread开启子线程的时候要自己创建自动释放池,否则会发生内存泄露
0 0
- NSRunLoop( 消息循环 )
- 消息循环NSRunLoop
- NSRunLoop消息循环
- NSRunLoop(运行循环)
- 186,NSRunLoop运行循环
- iOS 【Mutithreading-NSRunLoop 运行循环】
- NSRunLoop 运行循环的粗浅理解;
- NSRunLoop是消息机制的处理模式
- iOS开发消息篇—NSRunLoop
- NSRunLoop
- nsrunloop
- NSRunloop
- nsrunloop
- NSRunLoop
- NSRunloop
- NSRunLoop
- NSRunLoop
- NSRunLoop
- 时序预测技术
- VC计算器实现
- python学习---字典
- Swift:可选类型(optional)与构造函数
- OS X EI Capitan安装后需要的配置
- 消息循环NSRunLoop
- React Native真机调试
- Material Design 之 Theme
- 单链表之创建与求单链表的长度
- react-native里TextInput遇到的一些问题及解决方案
- linux文件和目录管理
- 操作系统: 银行家算法的分析和代码实现(c++语言)
- [python]一个简单的听写练习工具
- 什么是rest