NSArray:lastObject是否返回自动释放的对象?

Kyl*_*yle 9 iphone cocoa objective-c

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

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

array是唯一对正在访问的对象具有retain的实体.这样做安全吗?我认为这只有在lastObject自动释放对象的情况下才能工作,如果确实如此,我无法弄明白.

syl*_*aar 11

为什么不打电话

[array removeLastObject]
Run Code Online (Sandbox Code Playgroud)

在你的功能结束?这是少发布/保留的一个.它可能会使您的代码更具可读性/更少混乱.

要记录Apple文档:

与NSArray一样,NSMutableArray的实例保持对其内容的强引用.如果不使用垃圾回收,则在将对象添加到数组时,该对象会收到保留消息.从可变数组中删除对象时,它会收到一条释放消息.如果没有对该对象的进一步引用,则表示该对象已被释放.如果您的程序保留对此类对象的引用,则引用将变为无效,除非您在将对象从数组中删除之前向该对象发送保留消息.例如,如果anObject在从数组中删除之前未保留,则下面的第三个语句可能会导致运行时错误:

id anObject = [[anArray objectAtIndex:0] retain]; 
[anArray removeObjectAtIndex:0]; 
[anObject someMessage];
Run Code Online (Sandbox Code Playgroud)

  • @harms:没有一般规则,从名称不包含"new",复制"或"alloc"的方法返回的对象返回自动释放的对象.唯一的规则是你没有这样的对象. (4认同)