1.CADisplayLink、NSTimer 会对 target 产生强引用,如果 target 又对它们产生强引用,呢么就会引发循环引用,例如
解决方案采用
NSProxy
2.NSProxy没有 init方法,直接 alloc 这个类就是用来做消息转发的,NSProxy会直接进入消息转发过程
3.NSTimer 依赖于 RunLoop,如果 RunLoop 任务过于繁重,会导致计时不准确,GCD 定时器比较准确,跟系统内核挂钩
4.iOS 的内存分布
5.Tagged Pointer
6.OC 对象的内存管理
7.引用计数的存储
8.weak散列表在delloc的时候会找到,SideTable 里面的 weak_table 对弱引用进行清除
8.1 .sideTables模拟器 最多 64 长度,真机 8 长度 模板类是 StripedMap,sideTables里面存储的就是SideTable,weak_table_t是全局的,所以所有的SideTable里的 weekTable都是同一个,weekTable存储所有被弱引用的对象,weak_entry_t存储着被弱引用的对象 ,一个union共用体 里面weak_referrer_t存储着弱引用该对象的地址数组(分为动态数组和固定)
9.自动释放池
10.AutoreleasePoolPage的结构
autorelease对象什么时候进行release,如果被@autoreleasepool池包裹,则出了大括号就释放,没有的话,由RunLoop来控制的,它可能是在某次RunLoop循环中,RunLoop休眠之前调用了release