RunLoop

自动释放池什么时候创建和释放

1.第一次创建, 是在RunLoop进入的时候创建  对应的状态 = kCFRunLoopEntry

2.最后一次释放, 是在RunLoop退出的时候  对应的状态 = kCFRunLoopExit

3.其它创建和释放

* 每次睡觉的时候都会释放前自动释放池, 然后再创建一个新的

_wrapRunLoopWithAutoreleasePoolHandler activities = 0x1,

1  = kCFRunLoopEntry  进入RunLoop  创建自动释放池

_wrapRunLoopWithAutoreleasePoolHandler activities = 0xa0,

160 = kCFRunLoopBeforeWaiting  即将进入睡眠 ,先释放上一次创建的自动释放池, 然后再创建一个新的释放池

+

kCFRunLoopExit 即将退出RunLoop  释放自动释放池

子线程创建注意事项:

1、子线程的NSRunLoop 需要手动创建

2、子线程的NSRunLoop 需要手动开启

3、 如果子线程的NSRunLoop没有设置source or timer,那么子线程的NSRunLoop会立即关闭

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:YES];

[runLoop addTimer:timer forMode:NSRunLoopCommonModes];

// 启动RunLoop

[runLoop run];

2.自动释放池什么时候释放?

通过Observer监听RunLoop的状态

应用场景:

3.1 开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程发来消息,处理其他事件)

       1)在子线程中开启一个定时器

       2)在子线程中进行一些长期监控

3.2 可以控制定时器在特定模式下执行

3.3可以让某些事件(行为、任务)在特定模式下执行

3.4可以添加Observer监听RunLoop的状态,比如监听点击事件的处理(在所有点击事件之前做一些事情)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Run loop 剖析:Runloop 接收的输入事件来自两种不同的源:输入源(intput source)和定时...
    Mitchell阅读 12,490评论 17 111
  • 一、什么是runloop 字面意思是“消息循环、运行循环”。它不是线程,但它和线程息息相关。一般来讲,一个线程一次...
    WeiHing阅读 8,181评论 11 111
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    made_China阅读 1,233评论 0 7
  • 如果没有RunLoop main函数中的RunLoop 第14行代码的UIApplicationMain函数内部就...
    JonesCxy阅读 572评论 0 4
  • 基本数据类型之间的转换(值转换) boolean类型不可以和其他基本数据类型进行转换 整型,字符型,浮点型之间的转...
    千叶鸟阅读 288评论 0 0