Objective c NSMutableArray中的lastObject是否返回该对象的副本?
我有一个关于这段代码的问题Objective c NSMutableArray中的lastObject是否返回该对象的副本?,objective-c,xcode,nsmutablearray,Objective C,Xcode,Nsmutablearray,我有一个关于这段代码的问题 NSNumber *lastObject = [self.myStack lastObject]; if(lastObject){ [self.myStack removeLastObject]; } return [lastObject doubleValue]; 我很惊讶,lastObject虽然被删除了,但仍然在内存中。 这是怎么发生的?是不是lastObject返回了对象的副本?不是,它不是副本,只是自动删除。它将在不久的将来发布 编辑:为了澄清
NSNumber *lastObject = [self.myStack lastObject];
if(lastObject){
[self.myStack removeLastObject];
}
return [lastObject doubleValue];
我很惊讶,lastObject
虽然被删除了,但仍然在内存中。
这是怎么发生的?是不是
lastObject
返回了对象的副本?不是,它不是副本,只是自动删除。它将在不久的将来发布
编辑:为了澄清-在
[self.myStack removeLastObject]
上,对象立即被发送释放
,但您从[self.myStack lastObject]
中获得了一个自动释放的指针,因此数组不是对象的最后所有者。在被删除后,我如何仍在访问它?顺便说一下,我的内存管理依赖于iOS 5的引用计数。在此基础上进行扩展:Objective-C中对象的标准getter行为类似于-(object*)属性{return[[property retain]autorelease];}
,因此,无论返回什么,都保证在自动释放池的生命周期内安全使用,即使调用getter的对象的生命周期更短NSArray
对数组成员遵循此模式。可以,但对数组中的最后一个对象不调用release吗?可以,但不能立即调用。它由当前的自动释放池持有,该池将在不久的将来释放它。你绝对应该阅读《内存管理指南》。我不会依赖这种行为,因为我在任何地方都没有看到它的文档。