学习MJ的视频课程,整理总结知识点–MRC、copy
MRC
人、狗
狗属于人,人存在狗就要存在,人死了,狗也得死。狗的内存管理交给人
有两个狗,人换狗了,老狗要先释放
set方法:release旧值,retain新值
要判断是不是同一个狗,同一个狗的话就跳过,因为此时release旧值,导致狗的retaincount为0,狗会释放
1 | - (void)setDog:(MJDog *)dog { |
升级版使用@property
@property, 编译器自动生成synthesize:自动生成成员变量和属性的setter、getter实现
1 | @property (nonatomic, retain) MJDog *dog; |
MRC编程
NSMutableArray的alloc方法,需要自己release,不是alloc或new或copy初始化的,比如[NSMutableArray array]初始化的,就不需要调用release,这个类方法内部实现会有类似autorelease函数的调用
工厂方法,里面封装autorelease
copy
拷贝
1 | 根本 |
不可变对象的copy,大家都是不可变,干脆指向同一块内容,所以生成的还是不可变对象
可变对象的copy,都是深拷贝,生成不可变副本
总结
参考和源码
源码: