内存管理黄金法则
The basic rule to apply is Everything thatincreases the reference counter with alloc,[mutable]copy[WithZone:] or retainis in charge of the corresponding [auto]release.
如果对一个对象使用了alloc,[mutable]copy,retain,那么你必须使用相应的release或者autorelease
内存管理类型定义
基本类型任何C的类型
如:int,short,char,long,long long,struct,enum,union等属于基本类型或者结构体
内存管理对于C语言基本类型无效
OC类型(非基本类型)
任何继承于NSObject类的对象都属于OC类型
也就是除了C之外的其它类型
OC内存管理
Objective-C类中实现了引用计数器,对象知道当前被引用的次数
最初对象的计数器是1
如果需要引用对象,可以给对象发送一个retaiin消息,这样对象计数器就加1
当不需要引用对象了,可以给对象发送release消息,这样对象计数器就减1
当计数器减到0,自动调用对象的dealloc函数,对象就会释放内存
计数器为0的对象不能再使用release和其他方法
内存管理总结
Objective—C的内存管理机制与.net/java那种全自动的垃圾回收机制是不同的,它本质上还是C语言中的手动管理方式,只不过稍微加了一些自动方法。
Objective-C的内存管理是基于引用计数的。要做的事情只是关注的引用,而释放内存的工作实际上由运行环境完成
在最简单的情形中,分配的(alloc)对象,或者是保留(retain)在一些地方的对象,都需要发送一个release消息。这也意味着,如果使用一次alloc,然后又retain了一次,那你需要release两次才能释放该对象的内存
-(vlid)setDog:(Dog *)aDog{
If(aDog!=_dog){
[_dogrelease];
_dog= [aDog retain];
}
}
-(Dog *)dog{
Return_dog;
}