ARC 总结了一下控制器被强引用不走dealloc的原因无非就是三中情况:
一.block块使用不当。因为block会对方法中的变量自动retain一次。请检查控制器中block代码。(我的就是因为这没有走dealloc)
二.NSTimer没有销毁。在viewWillDisappear之前需要把控制器用到的NSTimer销毁。
三.控制器中的代理属性一定要是弱引用,不要强引用。
MRC情况比较多一点
局部变量创建后要release
全局变量在dealloc中既要release,也要置为nil
使用label,文字提示,发现问题出现的地方 定位
内存泄漏的分析方法:dealloc,内存图,静态分析,leak分析
泄漏的原因:ARC中多是:NSTimer delegate block
方法分析:通过屏蔽所有代码,分析是类的内部还是外部导致的泄漏
修改其父类,查看是外部创建还是父类导致的内存泄漏
依次可以通过屏蔽代码,来最终确定泄漏的地方
懒加载方式创建的对象释放
MRC懒加载方式创建的对象,在dealloc中释放时,[_lbTitle release]; _lbTitle = nil;,使用_xx 而不要使用self.xx,否则会重新调用get方法,导致崩溃
使用
self.lbTitle.frame = CGRectMake(0, 0, 10, 10);
创建懒加载
-(UILabel*)lbTitle
{
if (_lbTitle != nil)
return _lbTitle;
_lbTitle = [[UILabel alloc] init];
_lbTitle.textColor = [UIColor whiteColor];
_lbTitle.backgroundColor = [UIColor clearColor];
_lbTitle.adjustsFontSizeToFitWidth = YES;
[self addSubview:_lbTitle];
return _lbTitle;
}
释放
[_lbTitle release];
_lbTitle = nil;
网友评论