我是否必须在iOS编程中使用发行版进行内存管理?

时间:2012-07-07 11:42:02

标签: ios objective-c-blocks

我看到了以下一段代码

   UIAlertView *alert = 
   [[UIAlertView alloc] initWithTitle :@”Hello World!” 
                                   message:@”iPhone, here I come!”  
                                  delegate :self
                         cancelButtonTitle:@”OK” 
                         otherButtonTitles:nil ];
   [alert show];
   [alert release];

我是否每次都需要调用release,或者有没有办法自动管理java或.NET中的垃圾收集等内存?

3 个答案:

答案 0 :(得分:3)

您可以使用ARC(自动引用计数),它不是垃圾收集,而是一种编译器功能,让开发人员不必担心内存管理。

查看此question和此link

简而言之,ARC就像手动引用计数(MRC),编译器可以确定何时调用retain / release。

您还可以将任何非-ARC项目转换为使用来自XCode的ARC(编辑 - >重构 - >转换为Objective-C ARC)。您还可以选择性地将项目/文件设置为不使用ARC(例如第三方代码)。

答案 1 :(得分:1)

Java.NET是垃圾收集的平台,它们在自己的虚拟环境中运行。 Objective-C构建于C之上,内存管理由开发人员处理。 Apple推出了名为Automatic Reference CountingARC)的东西,它负责释放没有指针的对象,但无论如何ARC不像垃圾收集。因此,您需要阅读内存管理规则以及/或如何正确使用ARC ...

答案 2 :(得分:0)

其他答案肯定是正确的。如果您进行手动内存管理:您只需要释放通过名称以“alloc”,“copy”,“new”或“mutableCopy”开头的消息获得的对象。从消息返回的所有其他对象不归您所有,也不需要释放。其中大多数都被添加到自动发布池中。您还应该遵循该约定并始终返回自动释放的对象(关于上面列出的异常)。

编辑:哦,还有一件事:由于这种自动释放行为,您需要保留要保留的对象,方法是将它们分配给类的保留属性,或者使用[retain]手动执行。遵循并记住这三条规则可以让您顺利通过。