ianpresentdealloc

最近在检查内存泄露的时候发现了一个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方法就正常执行了。

以上为个人见解,欢迎大神评论指导!

打赏作者
如果这篇文章帮助了你,可以请作者喝罐可乐,以此激励作者创作更多!

您的支持将鼓励我继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏