Objective c 关于NSMutableArray、指针和发布的问题

Objective c 关于NSMutableArray、指针和发布的问题,objective-c,Objective C,NSMutableArray的addObject方法到底是如何工作的?它是创建一个新实例并将其添加到数组中,还是只是将对同一对象的引用添加到数组中 如果答案是它只插入对对象的引用,那么它将引出我的下一个问题: 假设我的一个类中有以下方法(“list”是一个NSMutableArray),很高兴,这段代码按照我想要的方式工作,但我似乎不完全理解其中的原因: -(void)buyItem:(Item *)anItem { Item * newItem = [[Item alloc]init]

NSMutableArray的addObject方法到底是如何工作的?它是创建一个新实例并将其添加到数组中,还是只是将对同一对象的引用添加到数组中

如果答案是它只插入对对象的引用,那么它将引出我的下一个问题:

假设我的一个类中有以下方法(“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中的对象呢?它们不是指向同一个对象吗?

当您使用方法
addObject:
it
retain
s added
Object
将对象添加到
NSMutableArray
时。这就是为什么您可以
以后释放它,然后使用
对象索引:
方法访问它。

当您使用方法
添加对象到
NSMutableArray
时,可以
添加对象:
保留添加的
对象。这就是为什么您可以
稍后释放它,然后通过使用
objectAtIndex:
方法访问它来使用它。

它添加一个引用,然后将对象保留计数增加一。您所做的是正确的,并且它仍然存在于数组中,保留计数为1

供你参考。

它添加一个引用,然后将对象保留计数增加一。您所做的是正确的,并且它仍然存在于数组中,保留计数为1

供你参考。
理解
发布
解除锁定
之间的区别很重要
release
只是将“retain count”(保留计数)递减,但当计数递减为零时,
release
将继续对对象执行
dealloc
操作


一般情况下(除非另有说明),当您将对象引用(即指针)传递给Objective-C对象,并且它在您调用该对象的持续时间之外保留该引用的副本时,它将代表自己保留该对象,当对象本身被解除分配,或者引用的副本无效或被覆盖时,它负责
释放
对象。

理解
释放
解除锁定
之间的区别很重要
release
只是将“retain count”(保留计数)递减,但当计数递减为零时,
release
将继续对对象执行
dealloc
操作


一般情况下(除非另有说明),当您将对象引用(即指针)传递给Objective-C对象,并且它在您调用该对象的持续时间之外保留该引用的副本时,它将代表自己保留该对象,当对象本身被解除分配,或者引用的副本被取消或覆盖时,它负责
释放

我明白了!谢谢现在我要去查一下我明白了!谢谢我现在要查一下了啊,是的,我现在有点明白了!谢谢你的回答啊,是的,我现在有点明白了!谢谢你的回答