我对ARC for iOS相当新(对iOS来说还是新手),我有一些关于ARC的快速问题。
〜在View Controller中,如果我的viewDidUnload()方法中没有语句将我的属性设置为nil,那么当我的视图控制器被释放时,属性的内存是否仍会被释放?如果是这样,为什么我需要明确地拥有这个viewDidUnload方法?
〜在不是View Controllers的对象中,我应该在哪里将属性设置为nil at?在dealloc?那些原始属性如@property BOOL isActive;
......我需要将它们设置为等于零吗?
感谢。
答案 0 :(得分:4)
你可能甚至不需要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方法。