我是ios开发的新手,所以请原谅我的无知。我注意到,当我使用UICollectionViewCell时,我可以调用dequeueReusableCell实例化或调用现有的单元格。我想知道对于视图控制器是否有类似的东西。或者,如果不是,在应用程序中导航时,防止视图控制器不必要地重新实例化的正确方法是什么?
发布于 2017-04-16 23:09:50
如果您使用的是navigationController,例如,iPhone有设置,>>,General,>>。
当您在设置中时,没有加载GeneralVC。当你去上将军的时候,你现在有了SettingVC & GeneralVC,但没有AboutVC。如果您转到About,然后返回到General,那么AboutVC将被完全取消分配。
对于navigationControllers,每次加载viewController时,都会调用viewDidLoad
。
对于像你的手机应用程序一样的tabBarControllers,,所有的选项卡(收藏夹,最近,联系人,键盘,语音邮件)总是在内存中。他们不会被取消的。如果您在KeypadVC上,那么所有其他的VC仍然在内存中。对于tabBarControllers,每次加载viewController时,都会调用viewWillAppear
。viewDidLoad
将在第一次加载时被调用。
因此,根据您正在做的事情(tabBarController或导航控制器),在您离开它之后,viewController可能存在也可能不存在。
此外,我发现this comment thread和相关的问题。这个问题有点老了,但它能帮助你更好地理解一些旧的答案和你的这个问题。
发布于 2017-04-16 22:40:52
我认为您的意思是像ARC (自动参考计数器)这样的东西,它可以迅速地控制应用程序中所有无用的部分,以重用内存。你不应该在这个问题上费心,因为这是完全自动的,对前。如果您的vc已经被实例化,并且您已经移动到另一个vc弧中,您将首先释放该vc,因为它没有任何引用,唯一的问题是如果您从应用程序中的某个(主要是)闭包中错误地连接(引用)了第一个vc,那么arc不会从内存中删除该vc,因为连接仍然存在,ARC知道它的存在--然后您就有了泄漏,并且有方便的工具来检查应用程序ui的每个部分是否都是由Apple提供的。
发布于 2017-04-16 23:03:08
表和集合单元重用它们的视图,因为用户经常会很快地滚动许多项,并且对每个项的拆卸和重新分配内存不够有效,因此不能很好地执行。视图控制器的情况并非如此,因此不需要这种机制。
拥有一个视图控制器的多个实例是可以的;它不是内存泄漏。
https://stackoverflow.com/questions/43442795
复制相似问题