Objective c 关于NSMutableArray、指针和发布的问题
NSMutableArray的addObject方法到底是如何工作的?它是创建一个新实例并将其添加到数组中,还是只是将对同一对象的引用添加到数组中 如果答案是它只插入对对象的引用,那么它将引出我的下一个问题: 假设我的一个类中有以下方法(“list”是一个NSMutableArray),很高兴,这段代码按照我想要的方式工作,但我似乎不完全理解其中的原因:Objective c 关于NSMutableArray、指针和发布的问题,objective-c,Objective C,NSMutableArray的addObject方法到底是如何工作的?它是创建一个新实例并将其添加到数组中,还是只是将对同一对象的引用添加到数组中 如果答案是它只插入对对象的引用,那么它将引出我的下一个问题: 假设我的一个类中有以下方法(“list”是一个NSMutableArray),很高兴,这段代码按照我想要的方式工作,但我似乎不完全理解其中的原因: -(void)buyItem:(Item *)anItem { Item * newItem = [[Item alloc]init]
-(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:
itretain
s addedObject
将对象添加到NSMutableArray
时。这就是为什么您可以以后释放它,然后使用对象索引:
方法访问它。当您使用方法添加对象到NSMutableArray
时,可以添加对象:
它保留添加的对象。这就是为什么您可以稍后释放它,然后通过使用objectAtIndex:
方法访问它来使用它。它添加一个引用,然后将对象保留计数增加一。您所做的是正确的,并且它仍然存在于数组中,保留计数为1
供你参考。
它添加一个引用,然后将对象保留计数增加一。您所做的是正确的,并且它仍然存在于数组中,保留计数为1
供你参考。
理解发布
和解除锁定
之间的区别很重要release
只是将“retain count”(保留计数)递减,但当计数递减为零时,release
将继续对对象执行dealloc
操作
一般情况下(除非另有说明),当您将对象引用(即指针)传递给Objective-C对象,并且它在您调用该对象的持续时间之外保留该引用的副本时,它将代表自己保留该对象,当对象本身被解除分配,或者引用的副本无效或被覆盖时,它负责释放对象。理解释放和解除锁定之间的区别很重要release
只是将“retain count”(保留计数)递减,但当计数递减为零时,release
将继续对对象执行dealloc
操作
一般情况下(除非另有说明),当您将对象引用(即指针)传递给Objective-C对象,并且它在您调用该对象的持续时间之外保留该引用的副本时,它将代表自己保留该对象,当对象本身被解除分配,或者引用的副本被取消或覆盖时,它负责释放。我明白了!谢谢现在我要去查一下我明白了!谢谢我现在要查一下了啊,是的,我现在有点明白了!谢谢你的回答啊,是的,我现在有点明白了!谢谢你的回答