iOS内存泄漏的情况

2019-09-26  本文已影响0人  雾霭天涯

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;
上一篇下一篇

猜你喜欢

热点阅读