0

(只是让你知道我正在学习为 iphone 开发,没有界面生成器)

我正在编写我的第一个多视图应用程序,它有一个根视图控制器和两个其他视图控制器,并且根视图控制器使用延迟加载,所以当 viewDidLoad 时,它创建第一个视图控制器并将其视图添加到子视图,但没有在需要之前创建另一个。但是,在第二个加载后,它们都将停留在那里直到应用程序结束(除非它收到内存警告)。

所以我想知道:当用户切换另外两个视图时,我是否应该卸载另一个正在删除的视图(通过将其设置为 nil - 它是一个保留属性)?所以每次用户点击按钮时,当前的viewcontroller都会被卸载(在从superview中删除之后)并且下一个被加载并添加为子view?

那么这是正确的做法,还是正确的做法,但只有当应用程序有很多视图并且我的视图不够复杂以至于不能证明这样做是正确的,或者这样做是不好的,我应该让 didReceiveMemoryWarning 采取关心它(在 didReceiveMemoryWarning 中,我将当前未显示的视图控制器设置为 nil)?

4

1 回答 1

1

答案真的取决于。通常,您应该释放并设置为 nil 未显示的视图,但如果用户要经常在它们之间切换,您可能希望保留隐藏视图(缓存)。

您真的不希望您的应用程序将用户的手机推送到 didReceiveMemoryWarning。当您收到该警告时,手机中正在发生其他事情,可能会导致您的应用程序在 iPhone 转储缓存的 Safari 页面、缓存的 UIImageView 对象等时冻结片刻......这个过程可能会引起最终用户和您的注意应用程序可能感觉不如应有的顺利。

同样重要的是要记住,一些用户可能正在使用第一代 iPhone、iPod Touch 和 3G,因此他们不会拥有 3GS 的额外内存。

话虽如此,我在保守内存方面犯了错误,所以我会释放并取消视图,然后在用户想要查看它时重新实例化它。由于 didReceiveMemoryWarning 导致的分配视图与系统清理的影响通常对应用程序用户的影响要小得多。

于 2009-08-02T04:13:16.150 回答