首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone:使用retain vs autorelease

iPhone:使用retain vs autorelease
EN

Stack Overflow用户
提问于 2011-07-24 04:54:27
回答 4查看 716关注 0票数 0

其中哪一个是更好的实践?

A)稍后自行保留和释放对象

代码语言:javascript
复制
NSMutableArray* array = [[self getArray] retain];
....
[array release];

B)从返回对象的函数中自动释放

代码语言:javascript
复制
getArray {
   NSMutableArray* returnedArray = [[[NSMutableArray alloc] init] autorelease];
   .....
   return returnedArray;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-24 05:20:24

你可以阅读并遵循苹果关于memory managementperformance的指南。

我个人认为选择一种方式而不是另一种方式的原因:

使用自动释放pros:

  • 你不能填满它,内存会在某一时刻被释放。我喜欢把它看作是“掉进成功的坑里”。--

缺点:

  • 大量使用自动释放可能会导致内存问题,因为大量对象正在积聚,等待自动释放池释放。

使用保留/释放pros:

当您的内存是used/freed.

  • On ios时,
  • 更多控制苹果建议您尽可能使用释放而不是自动释放,以保持池的大小较小。

缺点:

  • Like C/C++ malloc/free new/delete您必须小心保持它们的匹配,这很容易造成内存泄漏。
  • 对于成员变量,您别无选择,只能保留/释放。

我认为,无论你选择哪种风格,归根结底都取决于你的代码所处的环境,并根据利弊选择最好的风格,我不认为有任何一个答案。

票数 2
EN

Stack Overflow用户

发布于 2011-07-24 05:03:25

当涉及到Objective-C中的内存管理时,最简单的经验法则是,您应该释放任何显式分配(alloc)、复制(copy)、更新(new)或保留(retain)的内容。

发布应该在上述操作的范围内完成。如果为方法返回的对象分配空间,则应在返回前自动释放该对象。因此,考虑到您提供的两个选项,B是推荐的做法。

票数 4
EN

Stack Overflow用户

发布于 2011-07-24 04:58:10

如果你想返回一个对象,你必须使用第二种方法。在所有可能的情况下,您都应该使用保留-释放方法,因为这样使用的内存更少。

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

https://stackoverflow.com/questions/6803243

复制
相关文章

相似问题

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