首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在保留后紧跟自动释放的情况下有什么意义?

在保留后紧跟自动释放的情况下有什么意义?
EN

Stack Overflow用户
提问于 2010-10-15 22:13:06
回答 1查看 183关注 0票数 7

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

这个类是NSArray的包装器,用来创建一个带有推送、弹出等的堆栈数据结构。

一个方法是topObject,它返回堆栈最上面的对象,它的实现是:

代码语言:javascript
复制
- (id)top {
    return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-15 22:17:30

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

代码语言:javascript
复制
- (id) top {
    return [stack lastObject];
}

然后想象一下:

代码语言:javascript
复制
foo = [bar top];
[bar removeAllObjects];
// Do something with foo

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3943040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档