MRC内存管理
环境:先关闭arc模式,选中项目-》build Settings
需记住Tips:
1.alloc,new, retain, copy,mutableCopy 需要release或autorelease
2.self 在实例方法(动态方法)代表当前类,在类方法(静态方法)中谁调用则代表谁,调用类方法的对象不需要进行释放
(一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存)
3.在方法后后面添加autorelease,会把对象交给autoreleasepool释放,但不建议把太多对象交于autoreleasepool,会占用内存
4.内存释放后,retainCount=0时,会调用-(void)dealloc方法
5.[[student alloc]init];即使不是student *stu=[[student alloc]init];也会分配内存
6.[[student alloc]init];等同[student new];
7.野指针,访问已释放的内存地址,程序会奔溃
release对象后,retainCount=0时,对象释放,但指向该对象的指针并未释放,仍存储着原来对象的地址,通过=nil来释放该指针
property属性:
retain:继承了NSObject对象才需要retain,release旧值,retain新对象
如:
assign:基本数据类型,默认setter方法直接赋值,不涉及内存释放问题
atomic 线程加锁,保证线程安全,防止写入未完成,被其他线程访问,但耗性能
nonatomic 不需要考虑线程安全,禁止多线程,提高性能
readonly 只读
readwrite 读写
copy/mutableCopy:release旧对象,copy新对象
copy生成对象为不可变对象,mutableCopy生成对象为可变对象
不可变对象copy为不可变对象,为浅复制,其余为深复制
//浅复制,复制指针,指向原对象,原对象内存计数器+1
//深复制,复制对象,原对象内存计数器不变,新对象内存计数器为1
实例:(了解浅复制、深复制的概念,基本了解了内存管理的概念)