ios - 使用 instantiateViewController 时防止内存泄漏

标签 ios swift xcode

我是ios开发新手,所以请原谅我的无知。我注意到,当我使用 UICollectionViewCell 时,我可以调用 dequeueReusableCell 来实例化或调用现有单元格。我想知道 View Controller 是否有类似的东西。或者,如果不是,那么在应用程序中导航时防止不必要地重新实例化 View Controller 的正确方法是什么?

最佳答案

如果您使用navigationController,例如iPhone 具有“设置”>>“常规”>>“关于”。

当您进入“设置”时,没有加载 GeneralVC。当您转到常规时,您现在有SettingVC 和GeneralVC,但没有AboutVC。如果您转到“关于”,然后返回“常规”,则 AboutVC 将完全释放。

对于navigationControllers,每次加载viewController时,viewDidLoad都会被调用。

<小时/>

对于 tabBarController,就像您的电话应用程序一样,所有选项卡(收藏夹、最近通话、联系人、键盘、语音邮件)始终位于内存中。他们不会被释放。如果您使用的是 KeypadVC,则所有其他 VC 仍在内存中。 对于 tabBarController,每次加载 viewController 时,viewWillAppear 都会被调用。 viewDidLoad 将在第一次加载时被调用。

因此,根据您正在执行的操作(tabBarController 或 navigationcontroller),viewController 在您离开 View Controller 后可能存在,也可能不存在。

另外我发现this comment thread和相关的问题。这个问题有点老了,但它可以帮助您更好地理解一些较旧的答案以及您的这个问题。

关于ios - 使用 instantiateViewController 时防止内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442795/

相关文章:

ios - swift 从另一个类访问类类型变量

swift - ARkit 中未检测到 SceneKit 碰撞

ios - Xcode 错误有关 plist : ACL=<not found> 的额外信息

ios - 尝试使用 oAuth 2 从 linkedIn 导入数据时未获得完整配置文件

ios - 如何修复 Swift 5.0 中的 “Cannot invoke initializer for type ' MKMapRect' with an argument list of type '(MKMapRect)' '” 错误

ios - 如何将自定义大小设置为以模态方式呈现 ViewController

objective-c - 我正在制作一个应用程序,并放置了一个 iAd,但我希望它在不可用时隐藏

ios - Xcode 6.4 导出临时 "Session has expired"

ios - 第一次比较两个 UIColors 不起作用

ios - 如何使用 prepareforsegueue 中的自定义 setter 方法