7

我正在查看一些开源代码,并试图理解为什么作者以特定的方式做某事。

该类是一个包装器,NSArray用于使用 push、pop 等创建堆栈数据结构。

一种方法是topObject返回堆栈上最顶层的对象,其实现是:

- (id)top {
    return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}

保留后立即自动释放是什么意思?

我最初的反应是,这会阻止分析器警告内存泄漏,但我在没有保留/自动释放的情况下进行了分析,仍然没有警告。

查看生命周期,将创建一个对象,将其推送到堆栈并释放,因此堆栈拥有该对象(底层数组将在添加时保留它)。

所以我不明白这里使用保留/自动释放......

4

1 回答 1

9

让我们假设top看起来像这样:

- (id) top {
    return [stack lastObject];
}

然后想象一下:

foo = [bar top];
[bar removeAllObjects];
// Do something with foo

将发生以下情况:第二行将使保留计数降至 0,第三行将foo指向已释放的内存。但是在保留计数为 1 的情况下retainautorelease直到池被清空,因此在第三行上foo仍将指向一个有效对象。

于 2010-10-15T14:17:30.017 回答