我习惯于以前版本的iOS编程,以及iOS 5和ARC的新编程。
我有以下代码:
UIBarButtonItem *backbutton = [[UIBarButtonItem alloc] initWithTitle:@"Bill"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
self.navigationItem.backBarButtonItem = backbutton;
在以前的iOS版本中,我必须明确释放后退按钮。在iOS 5中,我想知道这是如何完成的。这段代码位于视图控制器的“viewDidLoad”方法中。
答案 0 :(得分:4)
因为您使用的是ARC,所以无需执行任何操作即可释放按钮。它会自动发布。 ARC的制作是为了不必释放所有东西。它将由Xcode编译器处理。
答案 1 :(得分:2)
在幕后,iOS 5仍然使用保留计数执行内存管理,并在不再引用对象时释放它们。在ARC之前,iOS中的内存管理完全依赖程序员来涵盖所有运行时可能性(悲惨)。其他环境(如.NET和OS X)会定期将未引用对象的保留计数设置为零。这种“垃圾收集”的运行时系统不可预测地减慢了执行速度。 ARC是独一无二的 - 据我所知 - 它是内存管理的第一个解决方案,完全通过使用编译器(精彩)对每个可能的执行路径进行静态分析来执行。
基本上,编译器会根据需要透明地插入release
,retain
或autorelease
语句。理论上,由[NSString stringWithString]
等工厂方法生成的对象与[[NSString alloc] initWithString]
创建的对象具有相同的生命。有人知道LLVM编译器是否以不同的方式处理alloc
'ed对象?
答案 2 :(得分:1)
编辑,因为我说你可以在ARC下发布/保留是不正确的。你不能。这是一个很好的解释: Some questions about Automatic Reference Counting in iOS5 SDK