防止使用实例化视图控制器时内存泄漏



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

如果您使用的是导航控制器,例如iPhone具有"常规">>>>">

关于"的设置。当您在设置中时,没有加载通用VC。当你进入常规时,你现在有SettingVC和GeneralVC,但没有AboutVC。如果你转到"关于",然后回到"常规",则"关于VC"将完全解除分配。

对于导航控制器,每次加载视图控制器时,都会调用viewDidLoad


对于选项卡栏控制器,如您的电话应用程序,所有选项卡(收藏夹、最近、联系人、键盘、语音邮件)始终在内存中。他们不会被解除分配。如果您使用的是 KeypadVC,则所有其他 VC 仍在内存中。 对于 tabBar控制器,每次加载视图控制器时,都会调用viewWillAppearviewDidLoad将在首次加载时被调用。

因此,根据您正在执行的操作(tabBarController 或导航控制器),视图控制器在您离开它后可能存在也可能不存在。

此外,我发现此评论线程和问题相关。这个问题有点旧,但它可以帮助您更好地理解一些较旧的答案和您的这个问题。

表和集合单元格重用其视图,因为用户通常会非常快速地滚动浏览许多项目,并且为每个项目拆除和重新分配内存的效率不足以使其性能良好。 视图控制器并非如此,因此它们不需要此机制。

拥有多个视图控制器实例很好;这不是内存泄漏。

我想你的意思是像 ARC(自动引用计数器)这样的东西,它在 swift 中控制解除分配应用程序中每个无用的部分,以重用内存。你不应该为此烦恼,因为这是全自动的,例如,如果你的 VC 已被实例化,并且你已经移动到另一个 VC,ARC 将释放第一个 VC,因为没有任何对它的引用,唯一的问题是如果你错误地从应用程序中的某些(大部分)闭包连接到(引用)第一个 VC, 然后 ARC 不会从内存中删除该 VC,因为连接仍然存在并且 ARC 知道它 - 那么你就有泄漏,检查应用程序 UI 的每个部分是否正确分配的方便工具是 Apple 提供的仪器。

最新更新