2016 - 1 - 20 runloop学习(2)
一:CFRunLoopModeRef
1. CFRunLoopModeRef带表RunLoop的运行模式
2. 一个Runloop可以有若干个mode,每个mode又包含若干个sourse,timer,observer
3. 每当RunLoop启动时,只能指定其中一个mode,这个Mode被称为CurrentMode
[[NSRunLoop currentRunLoop].currentMode
如果需要切换Mode,只能退出Runloop,再重新指定一个Mode来运行。这样做的目的就是为了分割不同组的Source/Timer/Observer.
4.两个常用的Mode
4.1 kCFRunLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode中运行的。
4.2 UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView追踪触摸滑动,保证界面滑动时,不受其他Mode影响。
二:添加定时器到不同Mode中的区别
1.当程序中有scrollView等滚动时,RunLoop的模式切换为UITrackingRunLoopMode,如果将定时器添加到NSDefaultRunloopMode中,滚动比如textView定时器将不工作。如以下代码:
- (void)viewDidLoad {
[super viewDidLoad];
NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES ];
// 将定时器添加到当前主线程的RunLoop的默认Mode下
// 可以发现,当textView滚动时,不会打印
[[NSRunLoop currentRunLoop ] addTimer:timer forMode:NSDefaultRunLoopMode];
}
- (void)run{
NSLog(@"%s",__func__);
}
2.如果将定时器加入的Mode设为NSRunLoopCommonModes时,则当RunLoop为NSDefaultRunloopMode与UITrackingRunLoopMode时都将工作。
[super viewDidLoad];
NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES ];
// 将定时器添加到当前主线程的RunLoop的默认Mode下
// 如果改为forMode:NSRunLoopCommonModes,则定时器继续工作
[[NSRunLoop currentRunLoop ] addTimer:timer forMode:NSRunLoopCommonModes];
}
- (void)run{
NSLog(@"%s",__func__);
}
3.可以在打印RunLoop对象中发现:
可以发现,NSRunLoopCommonModes其实相当于一个标记符,标记某些Mode,默认标记是DefaulMode与TrackingMode。
2016 - 1 - 20 runloop学习(2)的更多相关文章
- 2016 - 1 - 20 runloop学习
一:Runloop基本知识 1.本质就是运行循环 2.基本作用: 2.1保证程序持续运行 2.2处理APP中的各种事件:触摸,定时器,selector... 2.3节省CPU资源,系统程序性能:它会让 ...
- Stack Overflow 2016年度 20个最佳Python问题(一)
Stack Overflow 2016年度 20个最佳Python问题(一) https://zhuanlan.zhihu.com/p/25020763
- 2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)
首先祝自己生日快乐~23咯~ 一 autorelease的概念 autorelease会像C语言的自动变量那样来对待对象实例.当超出作用域(相当于变量作用域)时,对象的实例release实力方法被调 ...
- RunLoop学习总结
开始 很久之前就看了一次YY的文章,没看懂.后来又看了sunny的视频和叶孤城的直播的视频,找了很多资料,对RunLoop也越来越清晰,然后又看了两三次YY的文章,虽然还没完全看懂,不得不说写的非常好 ...
- 北京工业大学耿丹学院2016下C作业学习总结
北京工业大学耿丹学院2016下C的班级地址在https://edu.cnblogs.com/campus/bjgygd/Sixteen-One . 第一次作业:两部分 第一部分:新建博客,书写第一篇随 ...
- Hitcon 2016 Pwn赛题学习
PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...
- [New Learn] RunLoop学习-官方译文
Run Loops Run loops是线程的一个基本构成部分.一个run loop 是一个事件处理循环,你可以使用它来处理线程收到的事件.设计run loop的目的就是可以使得线程在收到事件的时候处 ...
- 我的runloop学习笔记
前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...
- 从零开始HTML(二 2016/9/20)
1.布局 ① 使用 <div> 元素的 HTML 布局,<div> 元素常用作布局工具,因为能够轻松地通过 CSS 对其进行定位. <!DOCTYPE html> ...
随机推荐
- windows7系统配置maven环境
简介 maven的作用 1.通过在pom.xml配置的方式下载项目所需要的jar包 2.打jar包和打war包 1.环境配置 1.1 http://maven.apache.org/download ...
- iOS 面试基础题目
转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...
- robotframework笔记2
法文件和目录 层次结构安排测试用例构建如下: 在创建测试用例 测试用例文件 . 自动创建一个测试用例文件 测试套件 包含 测试用例文件. 一个目录包含测试用例文件形成一个更高级别的测试 套件. 这样一 ...
- Redis与Java - 数据结构
Redis与Java 标签 : Java与NoSQL Redis(REmote DIctionary Server) is an open source (BSD licensed), in-memo ...
- Spring使用RowMapper将数据中的每一行封装成用户定义的类
1.dao public interface MapperSelecteAllEmpDao { public List<Emp> all(); } 2.实现类 public class M ...
- ABAP版连连看
网上看到的,感觉不错,借来装13... *&---------------------------------------------------------------------* *&a ...
- Asp.Net 导出Excel数据文件
表格例子如下: <table id="tableExcel" width="100%" border="1" cellspacing= ...
- Spark(2) - Developing Application with Spark
Exploring the Spark shell Spark comes bundled with a PERL shell, which is a wrapper around the Scala ...
- DBCC DBREINDEX重建索引提高SQL Server性能
大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记录才能找到索要的数据.索引可以分为簇索引和非簇索引,簇索引通过重排表中的数 ...
- qml package 的使用
什么时候使用这个.就是多个view使用同一个deleagte的时候. The Package class is used in conjunction with VisualDataModel to ...