NSArray:lastObject 返回一个自动释放的对象吗?

2024-01-01

我正在开发一个 iPhone 项目,我想从 NSMutableArray 中检索一个对象,从数组中删除该对象,然后在以后使用它。代码看起来像这样:

NSMutableArray * array;
// fill the array
NSObject * obj = [array lastObject];
[array removeLastObject];
// do something with obj (in the same function)

数组是正在访问的对象上唯一具有保留的实体。这样做安全吗?我认为只有当 lastObject 自动释放该对象时,这才有效,但我不知道它是否有效。


为什么不打电话

[array removeLastObject]

在你的函数结束时?这样就少了一个释放/保留。它可能会使您的代码更具可读性/不那么混乱。

为了记录在案苹果文档 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html:

与 NSArray 一样,实例 NSMutableArray 保持强势 对其内容的引用。如果你 不要使用垃圾收集,当 您将一个对象添加到数组中, 对象接收保留消息。什么时候 从可变对象中删除对象 数组,它收到释放消息。 如果没有进一步的参考 对象,这意味着该对象 被解除分配。如果你的程序保留 对这样一个对象的引用, 参考将变得无效,除非 您向对象发送保留消息 在从数组中删除之前。 例如,如果 anObject 不是 在从中删除之前保留 数组,下面的第三条语句可以 导致运行时错误:

id anObject = [[anArray objectAtIndex:0] retain]; 
[anArray removeObjectAtIndex:0]; 
[anObject someMessage];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSArray:lastObject 返回一个自动释放的对象吗? 的相关文章

随机推荐