我正在开发一个 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(使用前将#替换为@)