首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么会自动保留和释放?

什么会自动保留和释放?
EN

Stack Overflow用户
提问于 2011-06-16 20:00:33
回答 3查看 106关注 0票数 1

我有点理解什么是自动保存和释放的,但我找不到任何官方数据,我想我搞错了。

  1. 设置使用@property( object )声明的属性将保留和释放旧值,但不会在没有self.的情况下在同一个对象内设置属性
  2. 方法中的所有对象(包括参数)在创建/传递时保留,并在方法返回时释放。
  3. 方法返回的对象不会被释放,而是将由其返回的方法释放,因为它在方法中的局部变量。

我有什么不对/忘了什么吗?

当返回被丢弃时会发生什么?就像[object someMethodThatReturnsAnObject];。它将不是它返回的方法的本地的,所以我不确定它是否会被释放,并且xCode警告它。

EN

Stack Overflow用户

发布于 2011-06-16 20:16:43

设置使用@property( retain )声明的属性将保留和释放旧值,但不会在没有self的情况下在同一个对象中设置属性。

调用为retain属性合成的setter方法将释放旧值并保留新值。直接设置一个象牙人,而不经过你的访问者,只会分配这个象牙人。它既不会保留也不会释放任何东西。self.foo = bar正是[self setFoo:bar]。无论setFoo:做什么,都会完成(合成的setFoo:保留版本就像上面所描述的那样工作)。foo = bar正是foo = bar

方法中的所有对象(包括参数)在创建/传递时保留,并在方法返回时释放。

这根本不是事实。他们既不保留也不释放。保持和释放不是神奇的发生。这是在响应对allocnewcopyretainrelease的调用时发生的。使用点表示法只是方法调用的一个简短操作,其中可能包含一个retain

方法返回的对象不会被释放,而是将由其返回的方法释放,因为它在方法中的局部变量。

这不是真的。方法返回的对象既不保留也不释放。按照惯例,名为allocnewcopy的方法将返回net +1 retain。任何其他方法都将返回一个NET0保留计数(对象上的自动释放将与保留的数量一样多)。“当前”保留计数将始终大于0,否则无法返回对象。(这是对事实的轻微掩饰。在这两种情况下,如果存在私有保留,则保留计数可能大于1。但从调用者的角度来看,这是一种很有用的思考方法。)

最好的地方是实用内存管理,它非常简洁地展示了这一切。其余的内存管理编程指南将给出更多的例子。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6377858

复制
相关文章

相似问题

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