iOS开发之presentViewController的指针
最近在检查内存泄露的时候发现了一个presentViewController的指针问题。例如:我们从视图控制器1 present 到视图控制器2,我们从视图控制器2使用:
[UIApplication sharedApplication].keyWindow.rootViewController = 视图控制器1;
此时虽然模拟器上显示的是视图控制器1,但是原先的视图控制器1和视图控制器2并没有走dealloc方法,也就是视图控制器没有销毁,这样就导致了内存泄露。
究竟是什么原因呢?我们来分析一下,当我们使用present到另一控制器后,我们返回上一个视图控制器的方法是:
[self dismissViewControllerAnimated:YES completion:nil];
也就是说试图控制器2肯定有一个强指针指向着视图控制器1。
因此,我们在更改keyWindow之后,这个强指针的仍然存在导致两个控制器都不能销毁,产生内存泄露。现在,必须将这个强指针消除,才能让控制器去销毁(ARC中的内存管理,没有强指针指向的对象,才会销毁)。
我们要在更改keyWindow之前使用:
[[UIApplication sharedApplication].keyWindow.rootViewController dismissViewControllerAnimated:NO completion:nil];
将之前present的试图控制器全部清除掉。这样视图控制器1和视图控制器2的dealloc方法就正常执行了。
以上为个人见解,欢迎大神评论指导!
8 评论
亲,圣诞快乐
@Betty 谢谢,亲
换了个新域名,我来告知你一下,顺便帮我改一下链接到新网址,谢谢啦~
***ifeizao.net
@肥皂 改好了.
例行路过,送IP来了。博主周末好!本周有没有更新博文啊?
@王语双个人网站 木有啊!
@王语双个人网站 3Q!!!
分享您的想法?
撰写评论