(正如你知道我正在学习为iphone开发,没有interfacae建设者)
我正在编写我的第一个多视图应用程序,它有一个根视图控制器和另外两个视图控制器,并且根视图控制器使用延迟加载,所以当viewDidLoad,它创建第一个视图控制器并将其视图添加到子视图,但是在需要之前不会创建另一个。但是,在第二个加载之后,它们都会一直保持到应用程序结束(除非它收到内存警告)。
所以我想知道:当用户切换另一个视图时,我应该卸载另一个被删除的视图(通过将其设置为nil - 它是一个保留属性)?因此,每次用户单击按钮时,都会卸载当前的viewcontroller(从superview中删除后),然后加载下一个并作为子视图添加?
这是正确的做法,或者是正确的,但只有当应用程序有很多视图并且我的复杂性不足以证明这样做时,或者根本不做这样做我应该只是让didReceiveMemoryWarning处理它(在didReceiveMemoryWarning中,我将当前未显示的viewcontroller设置为nil)?
答案 0 :(得分:1)
答案真的取决于。通常,您应该释放并设置为nil未显示的视图,但如果用户要经常在它们之间切换,您可能希望保留隐藏视图(缓存)。
您真的不希望自己的应用将用户的手机推送到didReceiveMemoryWarning。当你收到警告时,手机中发生的其他事情可能会导致你的应用程序冻结片刻,而iPhone会转储缓存的Safari页面,缓存的UIImageView对象等......这个过程对于最终用户来说是显而易见的应用程序可能不会像它应该的那样顺利。
同样重要的是要记住,有些用户可能正在使用第一代iPhone,iPod Touch和3G,因此他们不会拥有3GS的额外内存。
话虽这么说,我犯了对内存保守的错误,所以我会释放并取消视图,然后在用户想要查看它时重新实例化它。由于didReceiveMemoryWarning,您分配视图与系统清理的影响通常会大大降低您的应用程序用户的影响。