runloop和线程、autolesaePool之间的关系

线程与runloop之间的关系:每一个线程,包括主线程,都会拥有一个专属的 NSRunLoop 对象,并且会在有需要的时候自动创建


每当一个app启动时会创建一个默认线程(即主线程),主线程的runloop会自动注册两个observe观察者

第一个observe会观察enter事件,当有enter事件时(即进入runloop),会调用_objc_autoreleasePoolPush()创建自动释放池

第二个observe会观察 两个事件,BeforeWaiting(准备进入睡眠) 和 Exit(即将退出Loop),Exit(即将退出Loop) 时调用 _objc_autoreleasePoolPop() 来释放自动释放池

autoreleasePool以栈的形式进行存储,每当创建一个新的autoreleasePool时,他会压栈在最顶层,当他释放掉以后下边的autoreleasePool会到栈的最顶层

autoreleasePool的工作原理

当一个对象被创建时他的引用计数默认加1,当他被retain一次是应用计数会+1,release一次是引用计数会-1,当这个对象的引用计数为0的时候会被加入到autoreleasePool,并且会执行一次retain操作,在autoleasePool释放时,会对加入他的对象进行一次release跟着autoleasePool一起被释放掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

义中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值