零碎笔记
RunLoop
一,什么是runloop?
- 1、runloop从字面来说是指:运行循环。
- 2、在代码实现上,runloop内部实质上是一个do-while循环。会不断的检测source、observer、timer等事件。
- 3、runloop要保活,必须要在指定的mode里面添加事件源 (source,timer)
- 4、在OC里,runloop的使用是懒加载,当第一次调用[NSRunLoop currentRunLoop]时,内部会自动创建一个runloop,并且在创建子线程的runloop时,首先就会检测主线程的runloop是否已存在,不存在也会创建,所以iOS里面主线程和主运行循环系统会自动帮我们创建好。
二、runloop与线程的关系?
一个线程对应一个runloop,在源码内部,线程作为key、runloop作为value.
三、runloop有哪些mode?区分这些mode的好处?
苹果公开的有:NSDefaultRunLoopMode (对应 kCFRunLoopDefaultMode) (主运行循环默认就在这个模式)NSRunLoopCommonModes(对应 kCFRunLoopCommonModes)这个并不是真正的模式,他是一组mode,打上common标记的mode有(NSDefaultRunLoopMode和UITrackingRunLoopMode)苹果没有公开的mode主要是UITrackingRunLoopMode
分开多个mode的好处是能够让runloop在同一时刻处理一种类型的事件(也就是方便分别事件等级)。比如用户处理拖拽事件的时候,runloop就专心处理TrackingMode。
四、runloop的实际使用场景有哪些?
- 1、实现一个常驻子线程。像系统的主线程就是一个常驻线程。实现子线程常驻就需要在子线程创建一个runloop,并且要保活这个runloop.(也就是在这个runloop中添加事件,比如source、observer、timer)
- 2、改变runloop的mode,比如定时器创建时,默认是在NSDefaultRunLoopMode下面,如果要能够在拖拽模式下也能执行,需要改变定时器的runmode。另外NSURLConnection默认也是放在默认模式下,在tableView滑动的时候,要想能够下载,也需要改变runmode。
参考地址:
http://blog.ibireme.com/2015/05/18/runloop/
http://www.jianshu.com/p/d260d18dd551
常驻子线程创建:http://www.jianshu.com/p/0b082ab5a494
比较容易理解且好的文章:http://www.cnblogs.com/zy1987/p/4582466.html
内链函数
一、作用:
解决函数调用效率的问题
- 函数之间调用,是内存地址之间的调用,当函数调用完毕之后还会返回原来函数执行的地址。函数调用有时间开销,内联函数就是为了解决这一问题。
- 不用inline修饰的函数, 汇编时会出现 call 指令.调用call指令就是就需要:
(1)将下一条指令的所在地址入栈
(2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序).
二、使用:
三、使用场景:
适合与小内存函数,频繁执行的函数。
四、参考地址:
http://www.cnblogs.com/sixindev/p/4469144.html
http://www.jianshu.com/p/d557b0831c6a
http://www.jianshu.com/p/a4b77a1157b1