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,然后进行旧弱引用关系移除,以及新弱引用关系增加的操作。