3

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

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

  • 例如,当我有一个 2 窗口应用程序(主窗口+第二个窗口)并且我调用第二个窗口并填充一个数组时,当它关闭以返回主窗口时,我必须输入 array=nil 吗?还是在窗口关闭时自动生成 ARC?

提前致谢

4

2 回答 2

2

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

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

于 2012-11-27T16:55:25.190 回答
1

ARC 是 Objective-c 开发的一大进步,但你必须非常小心内存管理,即使你使用 ARC。

我建议你观看关于 ARC 的 WWDC 2011 视频以充分利用此功能,因为你需要观看一些细节才能真正不浪费设备的内存。

要充分利用 ARC,最重要的一点是确保您没有循环引用,例如一个控制器引用另一个控制器,并且两者都有强引用,当您认为您销毁了一个控制器时,另一个将保留它,然后您将不会释放任何内存。

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

所以回答你的观点:

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

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

于 2012-11-27T17:17:48.920 回答