【发布时间】:2011-04-23 03:34:41
【问题描述】:
可能重复:
Do removeAllObjects and release of an NSMutableArray both have the same functionality?
[nsmutablearray removeAllObjects]和[nsmutablearray release]的区别?
等待您的帮助。
【问题讨论】:
标签: objective-c nsmutablearray release
可能重复:
Do removeAllObjects and release of an NSMutableArray both have the same functionality?
[nsmutablearray removeAllObjects]和[nsmutablearray release]的区别?
等待您的帮助。
【问题讨论】:
标签: objective-c nsmutablearray release
首先,您询问的两种方法都是实例方法,而不是类方法。即,它们只能在 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 消息时,它会导致异常。
【讨论】: