从苹果的观点,控制器编程指南/内存的有效管理;
didReceiveMemoryWarning
使用此方法可以释放与视图控制器关联的所有非关键自定义数据结构。虽然您不会使用此方法来释放对视图对象的引用,但是您可以使用它来释放在viewDidUnload方法中尚未发布的任何与视图相关的数据结构。(视图对象本身应该始终在viewDidUnload方法中释放。)
viewDidUnload
您可以使用viewDidUnload方法来释放任何特定于视图的数据,如果视图再次加载到内存中,这些数据可以很容易地重新创建。不过,如果重新创建数据可能太费时,则不必在此处释放相应的数据对象。相反,您应该考虑在didReceiveMemoryWarning方法中释放这些对象。
http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html
?
发布于 2010-12-04 16:06:14
首先,这些只是指南,所以如果您不认为在didReceiveMemoryWarning中发布某些内容是很有意义的,那么就不要这么做。但是请记住,如果您的应用程序是首先导致内存警告的应用程序,那么它最终将被操作系统终止。
评论(1):批判性和非关键性完全是你的决定。只有你才能真正确定你持有哪些你认为重要的数据。尽管它可能与您的(3)密切相关,也就是说,容易重新创建的东西可能并不太重要。
Re (2):我不认为这句话指的是呼叫的顺序。正如您已经意识到的,通常情况下,viewDidUnload将在didReceiveMemoryWarning之后被调用(因为didReceiveMemoryWarning可以导致调用viewDidUnload )。例如,在viewDidUnload中,可以从一个nib中释放对UI元素的引用。所以也不要在didReceiveMemoryWarning中发布它们。
Re (3):如果视图正在使用,因此无法卸载,那么是的,显然在didReceiveMemoryWarning中发布它并不一定很有意义。但是,您实际上可能有一些视图无法卸载,但已知是不可见(不是非常正常)的实例,在这种情况下,卸载它的数据并在视图再次可见时重新创建它可能是有意义的。
此外,我同意“相反,你应该考虑.”评论有点奇怪,但我认为在didReceiveMemoryWarning中发布这些数据的意义在于,如果您收到了这些警告,那么您自己的应用程序可能会面临被终止的危险。因此,虽然当前的情况是,viewDidUnload可能总是作为内存警告的结果被调用,但在将来可能并不总是如此,因此从概念上讲,在didReceiveMemoryWarning本身中释放数据更有意义。在didReceiveMemoryWarning中,您知道存在内存压力,而在viewDidUnload中,您可能不知道。因此,尽管重新创建数据的代价确实很高,但这可能比终止应用程序更好。对用户来说,它看起来就像应用程序崩溃了一样。
我个人对这些方法的看法一般如下:
viewDidLoad.viewDidLoad (或其他特定于应用程序的事件),则可以重新创建这些数据。不要发布任何我无法重新创建的内容。发布于 2010-12-06 17:58:43
我正在构建的应用程序是图形密集型的,无论是在布局上,还是在与我正在下载和显示的数据相关的图像中。
我的didReceiveMemoryWarning方法都是确定哪些图像保存在内存中,但目前没有显示,并将它们从内存中删除。另一种情况是,在显示图像之前,您需要检查它是否还在附近,如果没有,则需要延迟加载。
https://stackoverflow.com/questions/4354332
复制相似问题