Runloop2_模式和监听事件

2018-08-04  本文已影响18人  edison0428
Runloop 官方文档
Runloop和定时器的关系

上篇文章说过,Runloop监听所有的事件中包括 时钟

NSTimer定时器要想能运行起来,,不管你是哪种方式创建定时的器,必须要将定时器添加到当前的Runloop中,有些创建的定时器默认添加到了当前的Runloop中,有些创建方法需要程序员手动添加方可运行

详解可见之前写过的定时器文章 定时器和Runloop

常用的方法
runloop和线程有关
[NSRunLoop currentRunLoop]:获取当前线程的runloop
[NSRunLoop mainRunLoop]:获取主线程的runloop
     
[[NSRunLoop currentRunLoop] run]; 本质是个死循环
子线程中的runloop需要手动开启,在子线程中这句代码之后的执行是不会执行的,因为它是死循环

UIKit框架是否 线程安全:大部分不是安全的,如果出现了多条线程访问,就会出现资源抢夺,所以就出现一个约定,用主线程去访问ui,ui所有的操作都在主线程,如果在子线程对ui进行操作,可能会出现乱七八糟的问题
而且uikit用nonatomic 效率也高
     
所谓的常驻线程:就是在自线程里[[NSRunLoop currentRunLoop] run];
模式
runloop的source
image.png

source是指一切事件的来源,timer也是一个source
source:事件源(输入源),按照函数调用栈分为两种事件源:source0source1
source0:非系统内核事件
source1:系统内核事件

函数调用栈:指的是函数掉用的顺序

上一篇 下一篇

猜你喜欢

热点阅读