内存布局
stack 方法调用 地址自上而下
heap 通过alloc等分配的对象 地址自下而上
bss 未初始化的全局变量
data 已初始化的全局变量
text 程序代码
内存管理方案
TaggedPointer : 小对象 NSNumber等
NONPOINTER_ISA :
散列表:
NONPOINTER_ISA
arm64架构
散列表方式
数据结构
MRC
手动引用计数
alloc
retain
release
retaincount
autoreleasepool
dealloc
ARC
自动引用计数
LLVM(编译器)和Runtime协作的结果
禁止调用retain、dealloc、release、retaincount
新增 weak strong 关键字
引用计数管理
alloc实现:经过一系列调用,最终调用C的alloc,此时并没有设置引用计数为1
retain实现:
release实现:
retaincount实现:
dealloc实现:
弱引用管理
清除weak变量,自动置nil
自动释放池
数据结构
pop:
循环引用
自循环引用:成员变量赋值原对象
相互循环引用:A B 对象指向彼此原对象
多循环引用:A B C 循环指向原对象
代理
block
nstimer
大循环
具体方案:
__weak
__block
__unsafe_unretain【不建议使用】