美文网首页iOS开发iOS内存泄露
ARC常见的内存泄漏修复

ARC常见的内存泄漏修复

作者: 踩了个铺 | 来源:发表于2016-06-06 18:16 被阅读1141次

要说发现问题 从程序crash开始 ,程序有时会发生系统捕捉不到的信号异常。


比较常见的是:

Signal 11 was raised. SIGSEGV

Signal 6 was raised. SIGABRT

这两个异常一个是释放已释放的内存,一个是使用了无效内存。看过这两个问题的解释后,我就开始觉得是内存泄漏的问题。


首先第一步,我使用最直白的方法

- (void)dealloc{

NSLog(@"%@---dealloc",[self class]);

}

dealloc打印 在ViewController的基类里加入以上打印,这样vc释放的时候就能够看到了,对项目进行检查,看那个Controller释放的时候没有打印,就可以锁定到哪些Controller有问题。再对Controller进行逐一检查,锁定问题。常见的问题有

问题一:

@interface HeadImgPickerView :UIView

@property(nonatomic,strong)UIViewController * controller;

@property (nonatomic, strong) id delegate;

- (instancetype)initWithViewController:(UIViewController *)vc;

-(void)show;

@end

delegate使用强引用,这里的delegate,controller都用该使用weak不然就会循环引用。

问题二:block 导致的计数+1无法回收

[alert addButton:Button_OTHER withTitle:@"相册" handler:^(RoadAlertDialogItem *item) {

   [self dosomething];

}];

block里引用block外的变量一定要进行weak处理,通常方式block内丢失还会在内部strong处理一下。

@WeakObj(self)

[alert addButton:Button_OTHER withTitle: @"相册" handler:^(RoadAlertDialogItem *item) {

@StrongObj(self)

[self dosomething];

}];

注:这里附上我的两个宏

#define WeakObj(o) try{}@finally{} __weak typeof(o) o##Weak = o;

#define StrongObj(o) try{}@finally{}  __strong typeof(o) o = o##Weak;

通过排查,处理了这两类问题基本上表面上的泄漏就差不多了。

下面使用xcode自带的工具检测一下,我就不再细说了。见推荐阅读


相关文章

  • ARC常见的内存泄漏修复

    要说发现问题 从程序crash开始 ,程序有时会发生系统捕捉不到的信号异常。 比较常见的是: Signal 11 ...

  • ARC下的内存泄漏

    ARC下的内存泄漏 ARC全称叫 ARC(Automatic Reference Counting)。在编译期间,...

  • Xcode调试工具

    一.静态内存分析工具 编译阶段查找内存泄漏等问题 1.常见内存泄漏问题 常见的内存泄漏除了循环引用,CoreFou...

  • 关于app的性能优化

    1.使用arc管理内存,避免内存泄漏。 2.给UITableViewCells,UICollectionViewC...

  • MRC转ARC

    春节前抽空花了一天的时间将手头的工程从MRC转成了ARC,然后陆陆续续地修复一部分因为转ARC引起的内存泄漏和崩溃...

  • 记录电商公司面试

    面试记录 问了常见的内存泄漏常见有哪些 Handler的内存泄漏情况 activity,window,view之间...

  • Android性能优化 内存泄漏和内存溢出

    内存泄漏 内存溢出 常见的内存泄露场景 常见的内存溢出场景

  • AFN 引起的内存泄漏

    今天在做内存泄漏检测时,发现很多地方都有内存泄漏,而引起泄漏的原因居然AFN, 网上查了资料了解到由于ARC机制导...

  • iOS开发ARC内存管理技术要点

    1、ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC)。 标签:内存暴涨、内存泄漏...

  • 轻松搞定内存泄露的产生,检测和解决

    以前MRC的下由于缺少release等会经常造成内存泄漏问题,如今在ARC下内存泄漏的问题已经减少了很多,但是还有...

网友评论

  • oneDemo:@property(nonatomic,weak)UIViewController * controller;这里有错误吧,这里修饰应该使用weak了吧,不是assign
    oneDemo:@踩了个铺 assign一般修饰基本数据类型,不修饰对象类型,weak修饰对象,释放的时候不会出现野指针,指向nil。
    踩了个铺:@oneDemo assign 是的weak更安全一些。虽然用在这里效果都一样。相关链接:http://www.jianshu.com/p/ccc31e92c664

本文标题:ARC常见的内存泄漏修复

本文链接:https://www.haomeiwen.com/subject/aywmkttx.html