如何正确撰写“viewDidLoad”方法

时间:2010-11-13 05:16:15

标签: iphone null viewdidload memory-management

我并不是iPhone开发人员的新手,但我遇到了一个我不确定代码最佳设计选择的情况。

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

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

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

谢谢! -Matt

2 个答案:

答案 0 :(得分:1)

为什么不在加载图像时按需创建图像视图?不需要先创建它。或者,如果你这样做,那么只要有代码重新发布它就会被释放。

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

答案 1 :(得分:1)

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

  2. 我不认为你应该在viewDidLoad中做什么规则,但是如果你在viewDidUnload中释放并将一些变量设置为nil,你不需要在viewDidLoad中再次检查nil,除非你不信任该框架。