[nsmutablearray removeAllObjects]和[nsmutablearray release]的区别

时间:2011-04-23 03:34:42

标签: objective-c nsmutablearray release

  

可能重复:
  Do removeAllObjects and release of an NSMutableArray both have the same functionality?

[nsmutablearray removeAllObjects][nsmutablearray release]的差异?

等待你的帮助。

1 个答案:

答案 0 :(得分:1)

首先,您要问的两种方法都是实例方法,而不是类方法。即,只能在NSMutableArray类的实例上调用它们 -

NSMutableArray* i = [NSMutableArray arrayWithCapacity:1];
[i removeAllObjects];

,或者

NSMutableArray* j = [[NSMutableArray alloc] initWithCapacity:1];
[j release];

removeAllObjects,清空数组,并向从数组中删除的每个对象发送release消息。但是,数组对象本身仍然存在,您可以通过执行[i addObject:obj]来为其添加项目,其中obj是有效对象。

另一方面,

release放弃对数组对象的控制,并将其保留计数减1.当对象的保留计数达到0时,它将从内存中释放。释放数组对象会导致release消息被发送到存储在数组中的每个对象。

arrayWithCapacity方法将i创建为自动释放的对象,并且不会在其上调用release。如果这样做并且导致对象为dealloc - ed,则稍后当NSAutoReleasePool对象向其发送release消息时会导致异常。