大佬教程收集整理的这篇文章主要介绍了整个视图控制器中的多个presentViewController方法调用会导致iOS中的内存泄漏吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当有多个视图控制器(如A,B,C,D)时会发生什么.所以呈现流程如下:
视图控制器A(主页)显示视图控制器B(列表).然后从View控制器B呈现View Controller C(Details).然后从View Controller C呈现View Controller D(Advanced Details).然后从视图控制器D呈现视图控制器A,以便直接导航到主页!!!
什么是最好的做法???
就个人而言,当我执行复杂的流程,例如呈现多个UIViewControllers并发现自己需要返回几个屏幕时,我不会在堆栈上弹出视图,直到我想要的那个在堆栈顶部(如果你使用导航如果它以模态方式呈现,则取消视图控制器,如果我使用它们,则解除segues.这里的风险可能是视图控制器的内存可能已经解除分配.
我会评论,但我没有足够的声誉.我在iOS开发中仍然非常新鲜,我的回答很简单.
编辑:感谢您提供的应用流程中提供的详细信息.既然你可以使用presentViewController,我假设你在NavigationController上运行?如果是这种情况,我会使用popToViewController或popToRootViewController(如果A是你的根视图控制器),而不是再次从D中呈现A.如果A再次出现在D中,我猜你的VC堆栈中会有2个A实例可能导致内存泄漏.
PopToViewController方法
NSArray arrayOfVCs = self.navigationController.viewControllers; for(UIViewController *currentVC in arrayOfVCs) { if([currentVC isKindOfClass:[ViewControllerA class]) { [self.navigation.controller popToViewController:currentVC animated:YES] } }
PopToRootViewController方法(假设A是导航控制器中的根视图)
[self.navigationController popToRootViewControllerAnimated:YES]
编辑2016年4月12日
我一直在考虑这个问题,以至于我实际上对它做了一个简短的RnD,只是想在这里分享我的发现.我做了一个粗糙的简单和脏的功能,以获得在我非常简单的应用程序中呈现的所有模态视图控制器的堆栈.
我测试了A – > B – > C-> B – > C – > B约20-30倍.每次我去时间B – > C,内存增加0.5MB(因为我的屏幕很简单,但你的屏幕可能不同),最终增加了20 MB到50 MB.
在这个函数中,我记录了堆栈中呈现的视图控制器的数量以及它们在数组中的名称.到目前为止,它对我有用,但你可以尝试一下,看看它是否适合你.
//global variables var vccount = 0 var vcnamelist = [String]() func getPresenTingViewStackCount(currentVC : UIViewController!){ if(currentVC.presenTingViewController != nil){ vccount = vccount + 1 let vc = currentVC.presenTingViewController vcnamelist.append(NSStringFromClass((vc?.classForCoder)!)) getPresenTingViewStackCount(vC) } } // to use func someRandomMethod(){ getPresenTingViewStackCount(self) }
尽管如此仍然认为最好使用导航控制器.这就是它们的基础.
以上是大佬教程为你收集整理的整个视图控制器中的多个presentViewController方法调用会导致iOS中的内存泄漏吗?全部内容,希望文章能够帮你解决整个视图控制器中的多个presentViewController方法调用会导致iOS中的内存泄漏吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。