微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iPhone:切换视图时取消分配和重新分配UI项的好主意?

如何解决iPhone:切换视图时取消分配和重新分配UI项的好主意?

| 假设我有2个意见。在第一个视图中,我分配了内存来显示许多UI组件,例如UILabel,UIImages等。 假设用户导航到下一个视图(通过UINavigationController) 是否可以在第一个视图中释放分配给显示UI组件的内存,然后在用户返回到第一个视图(在viewFirstLoad或适当的函数中)后再次初始化它们? 在我看来,如果您不执行此操作,则用户在该特定会话中使用您的应用的时间越长,内存将继续增加。 这是不允许的吗?皱眉?不可能?     

解决方法

        完全正常,实际上,功能是在标准UIViewController中内置的-当不显示控制器时,其视图可能会从内存中释放出来,并且您可以使用控制器的``0''方法释放其所有子视图(例如,通过IBOutlet引用保留的子视图)。 当控制器需要再次显示时,它将再次重新加载其视图。     ,        这取决于。通常,经验法则是您应该释放不需要的对象。如果您的视图只是一个视图,那么可以,我将其及其所有子视图发布。如果您的视图中的数据是通过冗长的检索过程(例如,Web服务调用)获得的,则我可能会将数据保留在某个地方,这样我就不必在用户访问时回退并检索数据回到第一个视图。     ,        为了澄清一点:Apple建议您在视图的-viewDidLoad方法中显示特定于该视图的数据,例如在标签上设置文本。然后,在-viewDidUnload中,应释放在-viewDidLoad中设置的视图对象(或从零开始)。至关重要的是,实现-viewDidLoad,因为基本的UIViewController代码在假定其子类可以卸载视图之前检查其子类是否实际实现了-viewDidLoad(并因此调用-viewDidUnload)。无法实现-viewDidLoad会导致控制器认为它以后无法重新创建视图,因此不会从内存中卸载视图。我认识的一位开发人员也遇到过同样的问题,因此花了很长时间才找到答案。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。