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

班级是周围的包装纸 NSArray 用按钮,pop等创建堆栈数据结构。

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

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

保留的是什么,然后立即进行自动发行?

我最初的反应是,这将阻止分析仪警告记忆泄漏,但是我在没有保留/自动发行的情况下进行了分析,并且仍然没有警告。

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

因此,我在这里不明白保留/自动发行的使用...

有帮助吗?

解决方案

假设 top 看起来像这样:

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

然后想象一下:

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

以下会发生:第二行将保持计数下降到0,并以第三行的形式下降 foo 将指向交易的内存。但是有 retainautorelease 保留计数为1,直到池被排空因此在第三行上 foo 仍将指向有效的对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top