自动释放池、runloop

2022-10-18  本文已影响0人  ios小喽喽

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

图(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(); // 当前运行循环

上一篇 下一篇

猜你喜欢

热点阅读