NSMutableArray的addObject方法究竟是如何工作的?它是创建一个新实例并将其添加到数组中还是只是将对SAME对象的引用添加到数组中?
如果答案是它只插入对象的引用,那么它会导致我的下一个问题:
假设我的一个类中有以下方法('list'是一个NSMutableArray),很高兴,这段代码按照我想要的方式工作,但我似乎并不完全理解为什么:
-(void)buyItem:(Item *)anItem
{
Item * newItem = [[Item alloc]init];
newItem.name = anItem.name;
newItem.details = anItem.details;
[list addObject:newItem];
[newItem release];
}
所以基本上在调用[list addObject:newItem]之后,现在总有两个引用指向同一个对象(newItem,另一个指向'list'数组)?
但是为什么在这里发布newItem对象,不会消除'list'NSMutableArray中的那个?他们不是指向同一个对象吗?
答案 0 :(得分:2)
使用方法NSMutableArray
向addObject:
添加对象时,retain
已添加object
。这就是为什么您可以稍后release
使用objectAtIndex:
方法进行访问后使用。
答案 1 :(得分:1)
它添加一个引用,然后将对象保留计数增加一。你正在做的是正确的,它仍然存在于数组中,保留计数为1。
答案 2 :(得分:0)
了解release
和dealloc
之间的区别非常重要。 release
只是递减“保留计数”,除了当计数递减到零时,release
继续到dealloc
对象。
一般情况下(除非另有说明),当您将对象引用(即指针)传递给Objective-C对象时,它会保留该引用的副本超出您对其的调用持续时间,{{ 1}}代表自己的对象,当对象本身被释放时,或当引用的副本被取消或被覆盖时,它负责retain
对象。