转自:http://bbs.weiphone.com/read-htm-tid-475557.html
数组(Array)是一个比较特别的例子,当你往数组里面添加一个对象时。数组里面存储的并不是这个对象的拷贝,而只是一个指向该对象的指针。数组在保存这个指针的同时会向指针所指的对象发送一个retain消息,相应的,对象的持有计数会增加。将对象从数组中移除的时候,同样会向对象发送release消息,对象的持有计数会减小。当我们释放这个数组时,会向保存在这个数组中的所有对象发送release消息。看下面的两个例子:
1、没有释放内存的版本
array = [[NSMutableArray alloc] init];
for ( i = 0; i < 10; i++) {
newNumber = [[NSNumber alloc]initWithInt:(i * 3)];
[array addObject:newNumber];
}
上面的代码在创建newNumber对象时,向对象的发送了retain消息,对象的持有计数变为1。当向array中添加这个对象的引用时,又向对象发送了一次retain消息,这样对象的持有计数就变为2了,在使用完array时,我们会习惯性的释放掉array,但这样并不会释放array所持有的对象,而只是使所有对象的持有计数变为1,这些对象依然会占用着内存。
2、释放内存的版本
for (i = 0; i < 10; i++) {
newNumber = [[NSNumber alloc]initWithInt:(i*3)];
[array addObject:newNumber];
[newNumber release];
}