点击页面1上的按钮跳转到页面2,此时内存增加5兆,然后点击页面2上的按钮dismiss页面2,这时执行了页面2的dealloc方法,但是那5兆内存却没有释放。为什么?难道ARC下的内存不是及时释放?我们应该怎样判断一个视图控制器或对象是否真正的释放?
注:内存使用情况我是通过Xcode的debug session来看的。
在类中加入以下代码,通过看dismiss的时候是否有该类的log来判断这个类的释放情况:
#pragma mark - dealloc -(void)dealloc { NSLog(@"dealloc %@", NSStringFromClass([self class])); }
比如类名MyViewController, 如果释放成功的话会有dealloc MyViewController的log。然后再调试,查找出到底是什么造成的。
MyViewController
dealloc MyViewController
可能情况:
在某个地方strong引用了该类
strong
在block中直接使用self(应该使用__weak typeof(self) weakSelf = self,然后在block中使用weakSelf)
block
self
__weak typeof(self) weakSelf = self
weakSelf
控制器重写-(void)dealloc方法, 在控制器dismiss或者是pop时看该方法有没有调用.
-(void)dealloc
用analyze分析App内存
如果是xcode 8.0版本以上的可以查看内存图.
在类中加入以下代码,通过看dismiss的时候是否有该类的log来判断这个类的释放情况:
比如类名
MyViewController
, 如果释放成功的话会有dealloc MyViewController
的log。然后再调试,查找出到底是什么造成的。
可能情况:
在某个地方
strong
引用了该类在
block
中直接使用self
(应该使用__weak typeof(self) weakSelf = self
,然后在block中使用weakSelf
)控制器重写
-(void)dealloc
方法, 在控制器dismiss或者是pop时看该方法有没有调用.用analyze分析App内存
如果是xcode 8.0版本以上的可以查看内存图.