1、OC中的内存管理机制:引用计数
每个对象都有引用计数。理论上:当对象的引用计数为0时,系统会自动调用方法,销毁对象,回收内存
在开发中存在多个指针操作同一个对象, 如果不在需要使用对象,减少相应的引用计数
2、内存管理的方式:
(1)MRC(手动内存管理):人工引用计数,内存的开辟和释放都由程序代码进行控制,相等垃圾回收来说,对内存的控制更加灵活,可以在内存需要释放时及时释放。
(2)ARC(自动内存管理):自动引用计数,用户可以不用去释放空间
3、alloc 引用计数加1(本质上从0——> 1)
Person * p = [[Person alloc]init];
NSLog(@"%lu", p.retainCount);//注: retainCount返回当前内存值
4、retain引用计数加1,在原有的基础上增加
Copyright:zhangjianjun
5、copy引用计数加1;被拷贝的对象的引用计数不变,新创建的对象从0增加到1
6、release引用计数减1,在原有的基础上减少
例:
[p release];
NSLog(@"%lu",p.retainCount);
[p release];
NSLog(@"%lu",p.retainCount);
[p release];
NSLog(@"%lu",p.retainCount);
//此时系统销毁对象,回收内存,此时,指针p被称为野指针,不应该再使用指针p
//操作原对象调用方法,p = nil; //
//由野指针直接换为空指针,对nil操作不会出错
[p release];
NSLog(@"%lu",p.retainCount); //打印结果为0;
7、autorelease 引用计数减1,在未来的某个时刻减1,如果想安全使用对象,可以通过对像调用
8、retain方法,增加对象的引用计数。持有(引用)对象
例:
- (void)setBook: (Book *)book
{
_book = [book retain];}//加retain是为了代码安全保证在调用Book 对象的时候其存在