立即保持自动发行的保留率是什么?
-
30-09-2019 - |
题
我正在查看一些开源代码,并试图理解为什么作者以特定的方式做了一些事情。
班级是周围的包装纸 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
将指向交易的内存。但是有 retain
和 autorelease
保留计数为1,直到池被排空因此在第三行上 foo
仍将指向有效的对象。
不隶属于 StackOverflow