自动释放池:管理对象的生命周期
图(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(); // 当前运行循环
网友评论