autoreleasepool和weak

autorelease 是一个双向链表,保存了子page和父page

autorelease(obj) obj在作用域中创建时,retainCount已经为1,需要使用release进行释放,而autoreleasepool通过一个*next的指针链表(单向),记录了这个对象 *next 为 id *

当push的时候,如果是Debug那么会创建一个新页,并且设置为hotPage,否则在next指针链表中加入一个占位指针,指针指向nil

当pop的时候,传入的stop参数应该为nil,也就是之前的占位符号,如果是Debug那么会销毁最近的hotPage,无论Debug还是Release都是销毁到上次push的位置

 

weak的关键是storeWeak(保存weak对象的指针,待weak引用的对象指针)

有一个静态全局的<object, SlideTable>的Map,在storeWeak的时候,会通过weak指针获取到原来存储的object对应的SlideTable(如果weak指针有指向旧值),同时一定会通过待引用的对象获取到保存该对象弱引用关系的一个SlideTable,然后进行旧弱引用关系移除,以及新弱引用关系增加的操作。

 

posted @ 2021-06-08 10:11  雨筱逸悠  阅读(72)  评论(0)    收藏  举报