OC 内存管理法则
1.alloc、new或copy来创建一个对象,那么你必须调用release或autorelease。换句话说,不是你创建的,就不用你去释放。(谁创建谁释放,对象所有权负责释放)
2.如果你在一个class的某个方法中alloc一个成员对象,且没有调用autorelease或及时releaase, 那么你需要在这个类的dealloc方法中调用release;如果调用 了autorelease,那么在dealloc方法中什么 都不需要做。
3.尽量用sel.xxx = xxx来对对象进行赋值操作,在对象不用的时候也可以用self.xxx = nil来对其释放
注意下面这个例子里,你无需保留新建的数值,因为数组会帮你保留。
NSMutableArray *array;
int i;
// …
for (i = 0; i < 10; i++)
{
NSNumber *n = [[NSNumber alloc] initWithInt: i];
[array addObject: n];
[n release];
}
本例中,在for循环里你需要给n发送一个-release消息,因为你需要始终在-alloc之后将n的数量保持为1。这么做的原因是当其通过-addObject:方法被添加至数组中时,数组已经将其保存起来。即使你释放了n,但是这个数字由于已经保存在数组里,所以不会被释放。
为了了解这些,假设你自己就是编写数组类的人。你不希望接收的对象未经你同意就消失,所以你会在对象传递进来时,对其发送一个-retain消息。如果他们被删除,你同时也要对应地发送一个-release消息。在你自己-dealloc时,你也要给你收到的所有对象发送一个-release。
|
|