Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutableArray中的lastObject是否返回该对象的副本?_Objective C_Xcode_Nsmutablearray - Fatal编程技术网

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吗?可以,但不能立即调用。它由当前的自动释放池持有,该池将在不久的将来释放它。你绝对应该阅读《内存管理指南》。我不会依赖这种行为,因为我在任何地方都没有看到它的文档。