如何使用ARC管理内存?

时间:2012-11-27 15:46:25

标签: iphone objective-c memory-management automatic-ref-counting

我在许多网站上看到,使用ARC时你仍然需要使数组和某些东西无效,但我认为它是自动的...所以我有几个问题:

  • 我什么时候需要关心记忆,我该怎么做?

  • 例如,当我有一个2窗口应用程序(主窗口+第二窗口)并且我调用第二个窗口并填充数组时,当它关闭以返回主窗口时必须放入array =零?或者在窗口关闭时自动进行ARC?

提前致谢

2 个答案:

答案 0 :(得分:2)

通过使数组无效,您告诉ARC您不再需要该数组,iOS可以安全地清理它。对数组进行无效也是一种很好的做法,因为对于许多形式的iOS编程来说,检查nil非常重要。

是的,您可以允许ARC处理所有内容,但您也可以在完成后立即允许iOS清理内存。我还要补充说,适当的nil设置语句可以是一种很好的自我文档形式。

答案 1 :(得分:1)

ARC在Objective-c开发方面取得了很大的进步,但即使使用ARC,也必须非常小心内存管理。

我建议您观看WWDC 2011 video about ARC以充分利用此功能,因为您需要观看一些细节才能真正浪费设备内存。

最重要的一点就是确保你没有循环引用,例如一个控制器引用另一个控制器,并且两者都有强引用,当你认为你破坏了一个控制器,另一个将保留它,然后你将没有释放它的记忆。

另一个重要的一点是,你需要确保你告诉编译器你不需要更多的对象,这就是为什么你需要将数组设置为nil,所以编译器只需要添加命令释放数组,因为ARC只是自动引用计数,它由编译器完成,而不是在运行时完成。现在,您的编译器会向您添加发布调用。

所以回答你的观点:

1 - 你总是需要关心内存,因为arc有一些必须遵守的规则,比如设置为nil你不再使用的对象。

2 - 在您的示例中,您需要注意一些要点,首先您需要确保没有对第二个窗口的引用,并且您还需要将数组设置为nil,因为Objective-c没有垃圾收集器,刚才引用计数不再明确了。