2010-11-13 118 views
0

我并不是全新的iPhone开发者,但是我遇到了一个情况,我不确定我的代码的最佳设计选择。如何正确编写“viewDidLoad”方法

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

viewDidLoad的最佳做法是什么?我是否应该实例化后面可能需要的任何变量?或者我应该检查我的代码中的其他位置的零值?

此外,在viewDidUnload,我应该只是将IBOutlet变量设置为零?为什么是这样?

谢谢! -Matt

+1

这不是直接回答这个问题,但也许你应该有下载操作取消内存警告以及... – 2010-11-13 05:29:31

回答

1

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

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

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

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