如何在ARC下正确管理此UIBarButtonItem的内存?

时间:2011-12-27 20:50:43

标签: ios ios5 automatic-ref-counting

我习惯于以前版本的iOS编程,以及iOS 5和ARC的新编程。

我有以下代码:

UIBarButtonItem *backbutton = [[UIBarButtonItem alloc] initWithTitle:@"Bill"
                           style:UIBarButtonItemStyleBordered
                           target:nil
                           action:nil];
self.navigationItem.backBarButtonItem = backbutton;

在以前的iOS版本中,我必须明确释放后退按钮。在iOS 5中,我想知道这是如何完成的。这段代码位于视图控制器的“viewDidLoad”方法中。

3 个答案:

答案 0 :(得分:4)

因为您使用的是ARC,所以无需执行任何操作即可释放按钮。它会自动发布。 ARC的制作是为了不必释放所有东西。它将由Xcode编译器处理。

答案 1 :(得分:2)

在幕后,iOS 5仍然使用保留计数执行内存管理,并在不再引用对象时释放它们。在ARC之前,iOS中的内存管理完全依赖程序员来涵盖所有运行时可能性(悲惨)。其他环境(如.NET和OS X)会定期将未引用对象的保留计数设置为零。这种“垃圾收集”的运行时系统不可预测地减慢了执行速度。 ARC是独一无二的 - 据我所知 - 它是内存管理的第一个解决方案,完全通过使用编译器(精彩)对每个可能的执行路径进行静态分析来执行。

基本上,编译器会根据需要透明地插入releaseretainautorelease语句。理论上,由[NSString stringWithString]等工厂方法生成的对象与[[NSString alloc] initWithString]创建的对象具有相同的生命。有人知道LLVM编译器是否以不同的方式处理alloc'ed对象?

答案 2 :(得分:1)

编辑,因为我说你可以在ARC下发布/保留是不正确的。你不能。这是一个很好的解释: Some questions about Automatic Reference Counting in iOS5 SDK