我正在看一些开放源码,并试图理解为什么作者以一种特殊的方式做了一些事情。
这个类是NSArray的包装器,用来创建一个带有推送、弹出等的堆栈数据结构。
一个方法是topObject,它返回堆栈最上面的对象,它的实现是:
- (id)top {
return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}保留,然后立即自动释放是什么意思?
我最初的反应是,这将防止分析器警告内存泄漏,但我在没有保留/自动释放的情况下进行了分析,仍然没有警告。
从生命周期来看,对象将被创建、推送到堆栈并释放,因此堆栈拥有该对象(底层数组在添加对象时将保留该对象)。
所以我不明白这里的保留/自动释放的用法...
发布于 2010-10-15 22:17:30
让我们假设top看起来像这样:
- (id) top {
return [stack lastObject];
}然后想象一下:
foo = [bar top];
[bar removeAllObjects];
// Do something with foo将发生以下情况:第二行将使保留计数降至0,第三行的foo将指向已释放的内存。但是对于retain和autorelease,保留计数是1,直到池被清空,因此第三行上的foo仍然指向有效对象。
https://stackoverflow.com/questions/3943040
复制相似问题