我是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/