自动释放池、runloop
自动释放池:管理对象的生命周期
![](https://img.haomeiwen.com/i1534714/4983cb5453e7018d.png)
magic:用来体验AutoreleasePoolPage的结构是否完整;
next:指向最新添加的autoreleased对象的下一个位置,初始化时指向begin();
thread:指向当前线程
parent:指向父节点,第一个结点的parent值为nil
child 指向子节点,最后一个结点的child值为nil
depth:代表深度,从0开始,往后递增1
hiwat:代表high water mark 最大入栈数量标记
![](https://img.haomeiwen.com/i1534714/71aacc2a7909d298.png)
![](https://img.haomeiwen.com/i1534714/75c33f048a8deae7.png)
RunLoop与线程
![](https://img.haomeiwen.com/i1534714/e18eedf66619a809.png)
RunLoop底层是一个do {} while(0) 循环:
![](https://img.haomeiwen.com/i1534714/8a6a848bdd1ddc74.png)
RunLoop结构:
![](https://img.haomeiwen.com/i1534714/13d4109fbc8a7e42.png)
![](https://img.haomeiwen.com/i1534714/de473c338ff4c0f2.png)
![](https://img.haomeiwen.com/i1534714/bd9869de8c280437.png)
Runloop机制:
![](https://img.haomeiwen.com/i1534714/cd0a9dabbcaa9073.png)
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处理事务:
![](https://img.haomeiwen.com/i1534714/c377671234e511c0.png)
RunLoop原理:
![](https://img.haomeiwen.com/i1534714/515f228188889dab.png)
CFRunLoopRef mainRunloop = CFRunLoopGetMain(); // 主运行循环
CFRunLoopRef currentRunloop = CFRunLoopGetCurrent(); // 当前运行循环