我是ios开发的新手,请原谅无知。我注意到当我使用UICollectionViewCell时,我能够调用dequeueReusableCell来实例化或调用现有的单元格。我想知道视图控制器是否有类似的东西。或者,如果没有什么是在应用程序中导航时防止不必要地重新实例化视图控制器的正确方法?
答案 0 :(得分:0)
我认为你的意思是ARC(自动参考计数器),它可以迅速控制你的应用程序中每个无用部分的释放,重用内存。你不应该为此烦恼,因为这是全自动的,例如。如果您的vc已被实例化,并且您已移动到另一个vc弧将取消分配该第一个vc,因为没有任何对它的引用,并且只有问题是如果您mistekenly建立连接(引用)从您的应用程序中的某些(大多数)关闭开始的第一个vc,然后ARC不会从内存中删除该vc,因为连接仍然存在且ARC知道它 - 然后您有泄漏,并且有方便的工具来检查是否每个部分您的应用程序ui是否正确解除分配是Apple提供的工具。
答案 1 :(得分:0)
表格和集合单元格重复使用它们的视图,因为用户经常非常快速地滚动浏览许多项目并且拆除并为每个项目重新分配内存不足以使其表现良好。视图控制器也是如此,因此它们不需要这种机制。
拥有多个视图控制器实例很好;它不是内存泄漏。
答案 2 :(得分:0)
如果您使用 navigationController ,例如iPhone有设置>>一般>>约。
当您在“设置”中时,没有加载GeneralVC。当你去上将军时,你现在有了SettingVC& GeneralVC但没有AboutVC。如果你去关于然后再回到General,那么AboutVC就完全被解除分配了。
对于navigationControllers,每次加载viewController时都会调用viewDidLoad
。
对于 tabBarControllers ,与您的手机应用程序一样,所有标签(收藏夹,最近款,联系人,键盘,语音邮件)始终位于内存中。他们不会被解除分配。如果您使用的是KeypadVC,那么所有其他VC仍然在内存中。
对于tabBarControllers,每次加载viewController时都会调用viewWillAppear
。 viewDidLoad
将在第一次加载时被调用。
因此,取决于您正在做什么(tabBarController或navigationcontroller),viewController在您离开它之后可能存在也可能不存在。
此外,我发现this comment thread并且问题相关。这个问题有点陈旧但它可以帮助你更好地理解一些较旧的答案以及你的这个问题。