1、autoreleasepool的结构是由autoreleasepoolpage为节点组成的双链表
2、autoreleasepoolpush的时候是一个子池的开始pop是子池的结束,全部是以页的形式进行数据的管理
3、开启一个autoreleasepool的时候push会面临三种情况 ,page是空、非空、非空并且当前page满了。这三种情况的处理分别为:空的时候建立一个新的poolpage。非空的时候进行add操作,操作的主要是拨动next指针,这个next的作用是指向最新obj的下一个地址的(可以理解为nil)。当满了的时候,去寻找child page,如果没有就新建一个page,然后进行add操作。
4、需要看到的是子pool和父pool之间是如何界定的,也就是pop的时候如何做到只释放子pool的,界定就是简单的一个nil来做边界。
5、hotpage是一个优化的操作,也就是当前正在操作的一个page的引用,coldpage是指上一个父page。
6、pop的时候会找到当前page页,然后得到pool的地址,对page页由next指针开始向下(向低地址)开始便利存入的对象,全部置为0xa3a3a3a3并向下移动next,然后释放掉这个对象。
网友评论