关于ARC for iOS的一些问题?

时间:2012-06-19 17:15:04

标签: objective-c ios automatic-ref-counting

我对ARC for iOS相当新(对iOS来说还是新手),我有一些关于ARC的快速问题。

〜在View Controller中,如果我的viewDidUnload()方法中没有语句将我的属性设置为nil,那么当我的视图控制器被释放时,属性的内存是否仍会被释放?如果是这样,为什么我需要明确地拥有这个viewDidUnload方法?

〜在不是View Controllers的对象中,我应该在哪里将属性设置为nil at?在dealloc?那些原始属性如@property BOOL isActive; ......我需要将它们设置为等于零吗?

感谢。

3 个答案:

答案 0 :(得分:4)

  1. 只要它们是弱引用,您就不需要将属性设置为nil。 IBOutlets通常应该是弱引用,因为它们视图控制器包含对视图的强引用,而视图又包含对其所有子视图的强引用。 (如果您的IBOutlet不属于该视图层次结构,则它们应该很强大。)
  2. 你不应该需要零或零,任何东西,对象或标量。使用Interface Builder时,Xcode将插入nilling语句,但这仍然是为ARC前Objective-C生成代码。
  3. 你可能甚至不需要viewDidUnload;它只在特殊情况下被调用,当内存压力很小时。因此,您不能依赖它进行清理。你的IBOutlets应该很弱,所以当从viewcontroller中清除视图时它们会被自动清理(如果重新加载视图,它们将被恢复)。

    我在这里假设你正在编写一个新产品,这意味着你只针对iOS 5或更高版本。如果您在新产品中定位iOS 4,那么您真的是shouldn't。全球已经发展,80%的市场在iOS 5或更高版本上。那就是今天。展望未来,对于更小比例的人来说,要避免使用iOS 5功能会更加困难。

答案 1 :(得分:1)

@properties的内存管理在ARC下自动处理。在您将自己设置为委托时,通常在离开之前将委托设置为nil(例如在viewWillDisapear中),以便将来对委托的调用不会引用垃圾。请继续关注即将发布的WWDC视频,以获取最新指导。

答案 2 :(得分:0)

在viewDidUnload中,您需要将出口引用设置为nil,因为ARC会释放它们,并且您不希望在发生这种情况后意外使用它们。

您无需对属性执行任何操作,它们将自动处理。事实上,你甚至不再使用aralloc方法。