0

我对 iPhone 开发人员并不完全陌生,但我遇到了一种情况,我不确定我的代码的最佳设计选择。

我有一个视图控制器,它从互联网上异步获取图像并将其加载到图像视图中。但是,当应用收到内存警告时,didReceiveMemoryWarning 会释放 imageView。如果应用程序在加载图像时收到内存警告,则当我的代码尝试将图像加载到 imageView 时,imageView 为零。

viewDidLoad 的最佳实践是什么?我应该只实例化以后可能需要的任何变量吗?或者我应该只检查代码中其他地方的 nil 值吗?

另外,在 viewDidUnload 中,我应该将 IBOutlet 变量设置为 nil 吗?为什么是这样?

谢谢!-马特

4

2 回答 2

1

为什么不在加载图像时按需创建图像视图?无需更早地创建它。或者,如果你这样做了,那么如果它已经发布,那么只需有代码来重新创建它。

在 viewdidunload 中,您应该释放在 viewdidload(或加载视图)中创建的资源。包括界面构建器为您连接的任何 IBoutlets。将这些变量设置为 nil 是一种很好的做法,以确保它们不会在发布后被无意访问,或者双重发布。

于 2010-11-13T08:13:50.427 回答
1
  1. IBOutlets 既可以是实例变量,也可以是属性。在这两种情况下,我们都应该在最顶层的超级视图被卸载时释放引用。将 IBOutlet 保留属性设置为 nil 会自动释放引用,但对于实例变量,我们需要释放它们。我们仍然需要将实例变量设置为 nil,因为 viewDidUnload 不是 dealloc,所以我们必须遵守托管内存规则,否则我们可能会在实例内部存在无效引用。

  2. 我认为在 viewDidLoad 中没有关于你应该做什么的规则,但是如果你确实在 viewDidUnload 中释放并将一些变量设置为 nil,那么除非你不信任框架,否则你不必在 viewDidLoad 中再次检查 nil .

于 2010-11-13T08:15:43.067 回答