【发布时间】:2009-05-25 10:27:44
【问题描述】:
文档没有说明这一点。当一个旧对象被“移除”并且一个新对象进入它的位置时,那么旧对象会发生什么?我必须自己释放吗?
【问题讨论】:
标签: iphone cocoa-touch memory-management uikit nsmutablearray
文档没有说明这一点。当一个旧对象被“移除”并且一个新对象进入它的位置时,那么旧对象会发生什么?我必须自己释放吗?
【问题讨论】:
标签: iphone cocoa-touch memory-management uikit nsmutablearray
不,你不必自己释放它。
如果替换对象的保留计数等于 0,您可能会收到错误。
新对象被保留。旧对象被释放。
【讨论】:
您不必释放它。
您没有对其执行 alloc、copy 或 retain,因此不对内存负责 - 使用此文档很清楚。
我不希望 Apple 记录 SDK 中每个方法的内存管理过程,除非它违反了他们已经设置的内存管理规则。如果文档没有说明,您可以假设默认规则适用。
【讨论】:
该文档在文件顶部非常清楚地说明了这一点:
与 NSArray 一样,NSMutableArray 的实例保持对其内容的强引用。如果不使用垃圾回收,当您将对象添加到数组时,该对象会收到一条保留消息。当一个对象从一个可变数组中移除时,它会收到一条释放消息。如果没有对该对象的进一步引用,这意味着该对象已被释放。如果您的程序保留对此类对象的引用,则该引用将变为无效,除非您在对象从数组中删除之前向该对象发送保留消息。
没有必要为每种方法重复记录这一点。
【讨论】: