【问题标题】:Multiple opening UIViewControllers with memory problems in iOS. Swift在 iOS 中多次打开存在内存问题的 UIViewController。迅速
【发布时间】:2017-07-27 03:42:15
【问题描述】:

我有以下情况,有一个事件类型(来自用户的数据),当前用户可以更详细地打开这个事件。其他用户可以参与,当前用户可以访问每个用户的个人资料。用户配置文件包含事件(它创建的),当前用户也可以访问它们。问题是,如果您多次执行此操作(如 15 次转换),那么应用程序已经消耗了 214 兆字节(iPhone 7),如果是这样,那么我认为应用程序可能会失败。应用程序中没有内存泄漏,因为我使用工具进行了检查,如果我单击选项卡(根控制器是 UITabBarController 的继承者),内存就会恢复正常状态(几乎就像应用程序启动时一样)。我对如何最好地实现这个系统感兴趣(例如,就像在 Twitter 上所做的那样,可以从一个用户的新闻专线切换到另一个用户的新闻专线等等)。感谢您的帮助。

【问题讨论】:

  • 你在为过渡执行segues吗?并且当你从一个视图转换到另一个视图时做一件事只是精细所有分配的变量,如数组字符串任何在 ViewDidDisappear 中分配的东西
  • @iOSGeek 不,我正在使用 UINavigationController 推送一个新的 UIViewController。
  • 好的,您是使用一个导航控制器进行转换还是使用多个导航?
  • @iOSGeek 每个UITabBar只有一个UINavigationController
  • 我要求进行多次转换,您是只更改 rootViewController 还是每次发生转换时在堆栈中添加一个新的 Nav

标签: ios swift


【解决方案1】:

我尽可能地减少了每个新 ViewController 的内存消耗。不要限制用户打开一个又一个屏幕的数量——甚至苹果也不这样做(例如——Apple Music)。 如果用户在屏幕上走 500 次而不返回,应用程序将耗尽内存并崩溃,这是正常的 - 如果用户想中断,那么它会成功。 但是,如果您在不可见的 ViewController 中释放未使用的资源,则可以最大限度地减少因内存不足而掉线的机会:

  • 覆盖 didReceiveMemoryWarning(释放容易重新创建的资源,例如 CoreData / Realm 对象、图片等)
  • 覆盖 viewWillAppear(用于创建资源)和 viewDidDisappear(以释放它们)

Resource

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-30
    • 2011-07-23
    • 2010-10-11
    • 2011-01-14
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多