0

我看到了下面的一段代码

   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 中的垃圾收集一样自动管理内存?

4

3 回答 3

3

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

看看这个问题和这个链接

简而言之,ARC 就像手动引用计数 (MRC) 一样,编译器会确定何时调用保留/释放。

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

于 2012-07-07T11:45:11.523 回答
1

Java并且.NET是垃圾收集的平台,它们在自己的虚拟环境中运行。Objective-C建立在上面,C内存管理由开发人员处理。苹果引入了一个叫做Automatic Reference Counting( ARC) 的东西,它负责释放没有指向它们的对象,但无论如何ARC都不像垃圾回收。因此,您需要阅读内存管理规则以及/或如何ARC正确使用...

于 2012-07-07T11:47:06.010 回答
0

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

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

于 2012-07-07T12:49:31.747 回答