MRC——手动管理内存
ARC——自动管理内存
MRC
OC采用“引用计数”(retainCount)方式管理对象占用的内存
1. 使用alloc为对象分配内存;使用dealloc释放对象所占用的内存。
2. 使用alloc、new或者copy构造对象是,对象的retainCount为1.
3. 调用对象的retain方法可以增加1 retainCount。
4. 调用对象的release方法可以减少1 retainCount。
5. 当对象的retainCount为0时,dealloc会自动调用,释放对象内存;否则分配的内存讲被一直占用。
6. 所有对象可以使用retainCount属性查看当前的计数器值。
例子:
NSString *dadyCar = [[NSStringalloc]initWithFormat:@”Car”];// dadyCar拥有对象所有权retainCount+1
NSString *mumCar = [dadyCar retain];// mumCar拥有对象所有权,retainCount+1
NSString *sonCar = [mumCar retain];// sonCar拥有对象所有权,retainCount+1
NSString * friendCar = sonCar;// friendCar不拥有对象的所有权,只是简单指向对象内存空间,retainCount不会发生变化
[dadyCar release];// retainCount-1
[mumCar release];// retainCount-1
[sonCar release];// retainCount-1
注意:
如果所有拥有对象的引用都释放了对象的所有权(retainCount=0),那么friendCar就变成了“野指针”,因为对象已经不存在,不能再调用对象的资源。
@property(retain,nonatomic)Strdent
一个类中,如果这个类有属性声明retain或者copy的属性,那么我们需要再这个类的dealloc方法里面释放这个属性。
dealloc方法在对象引用计数为0是自动调用。
主要用于适当自身所占用的资源。永远不要手动调用dealloc,应由系统自动调用。
|
|