美文网首页
自动释放池、runloop

自动释放池、runloop

作者: ios小喽喽 | 来源:发表于2022-10-18 17:24 被阅读0次

自动释放池:管理对象的生命周期

图(1)

magic:用来体验AutoreleasePoolPage的结构是否完整;

next:指向最新添加的autoreleased对象的下一个位置,初始化时指向begin();

thread:指向当前线程

parent:指向父节点,第一个结点的parent值为nil

child 指向子节点,最后一个结点的child值为nil

depth:代表深度,从0开始,往后递增1

hiwat:代表high water mark 最大入栈数量标记

图(2) 图(3)

RunLoop与线程

图(4)

 RunLoop底层是一个do {} while(0) 循环:

图(5)

RunLoop结构:

图(6) 图(7) 图(8)

Runloop机制:

图(9)

Runloop的item:

• block应用:__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ 

• 调用timer:__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ 

• 响应source0:__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ 

• 响应source1: 

__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ 

• GCD主队列:__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__

• observer源: 

__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__

RunLoop处理事务:

图(10)

RunLoop原理:

图(11)

CFRunLoopRef mainRunloop = CFRunLoopGetMain(); // 主运行循环

CFRunLoopRef currentRunloop = CFRunLoopGetCurrent(); // 当前运行循环

相关文章

  • 自动释放池

    首先这里先说一下RunLoop与自动释放池的关系吧 我是按照网上总结的RunLoop与自动释放池回答的面试官。当回...

  • autorelease 自动释放池的释放时机

    autorelease 自动释放池的释放时机 runloop就是iOS中的消息循环机制,当一个runloop结束时...

  • iOS 高级经典面试

    2.自动释放池什么时候释放? //第- -次创建:启动runloop时候//最后一次销毁: runloop 退出的...

  • 自动释放池 & Runloop

    前言 本篇文章会大致分析下自动释放池(AutoreleasePool)和 Runloop的底层实现原理,这两个知识...

  • 自动释放池、runloop

    自动释放池:管理对象的生命周期 magic:用来体验AutoreleasePoolPage的结构是否完整; nex...

  • NSString 内存管理

    在学习自动释放池与RunLoop的关系的时候发现申明NSString类型的变量未随RunLoop的进入休眠而释放,...

  • RunLoop笔记

    RunLoop是iOS和OSX中基本的概念,掌握RunLoop,能了解到苹果是如何利用RunLoop实现自动释放池...

  • 自动释放池

    自动释放池的创建和释放,销毁的时机如下所示 kCFRunLoopEntry; // 进入runloop之前,创建一...

  • 内存管理(四)

    自动释放池和Runloop关系 打印如下:() 分析:重点在Runloop开头和结尾有两个 callout 明为_...

  • iOS RunLoop

    RunLoop 的应用场景: RunLoop在系统中应用 1.自动释放池。 2.NSTimer 3.Perform...

网友评论

      本文标题:自动释放池、runloop

      本文链接:https://www.haomeiwen.com/subject/pobtartx.html