iOS内存泄漏的情况

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;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,847评论 1赞 32
  • 内存管理 ARC处理原理 ARC是Objective-C编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做...
    b485c88ab697阅读 11,385评论 3赞 47
  • ARC 处理原理 arc 是oc 编译器的特性,而不是运行时特性或者垃圾回收机制,ARC 所做的只不过是在代码编译...
    iChuck阅读 467评论 0赞 0
  • 为什么进行内存管理? 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时...
    天天想念阅读 1,030评论 1赞 6
  • 学期已经过半,浑浑噩噩的生活状态已经成为习惯,连走出宿舍都有些为难。 我不想再这样下去了,明天开始,就明天开始,...
    friquently阅读 194评论 0赞 0

友情链接更多精彩内容