APP Analyze(静态分析)

最近使用Analyzecommand+shift+B对App进行静态分析,遇到几种情况:

garbage value(垃圾值)

左边操作对象是垃圾值,检查是因为只申明了变量:NSInteger endTime;赋值是在判断语句中赋值的,存在并没有赋值的情况,只需要赋初值就可以了:

NSInteger endTime = 0;

never read(分配了空闲内存)

这是因为[NSMutableArray array]初始化分配了内存,而判断语句里面arrayWithArray:方法也相当于初始化分配了内存,就是把初始化的一个新的可变数组赋值给之前已经初始化过的可变数组,看似没什么大问题,其实存在一个数据源却申请了两块内存的问题,已经造成了内存泄露。

解决问题:

① 去掉之前的初始化,只做申明:

NSMutableArray *defaultImageNames;
NSMutableArray *defaultImages;

② 判断语句里面不使用初始化方法,只添加数组对象:

[defaultImageNames addObjectsFromArray:@[@"cmcc_normal",@"cmcc_normal",@"cmcc_normal",@"cmcc_normal"]];

[defaultImageNames addObjectsFromArray:@[[UIImage imageNamed:@"cmcc_normal"],[UIImage imageNamed:@"cmcc_normal"],[UIImage imageNamed:@"cmcc_normal"],[UIImage imageNamed:@"cmcc_normal"]]];

Null passed to a callee that requires a non-null 1st parameter(Null赋值给非空对象)

这是由于Null赋值给non-null对象。详情参考:会报编译器警告的Xcode 6.3新特性:Nullability Annotations

从上面代码可以看出:由于疏忽,判断语句的else里面并没有给filePath赋值,所以才会出现Null。只需赋值给filePath就好了:

filePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",@(self.itemIndex)]];

Potential leak of an object stored into 'XX'(存在潜在的内存泄露)

虽然是在ARC模式下,但不是什么东西都可以释放,例如上述的C-types对象,都需要手动来进行释放,所以上面的问题只需手动释放就可以了:

CFRelease(phoneNumbers);
CFRelease(anFullName);

期间还出现过一次这样的错误:Null pointer argument in call to CFRelease,意思是空指针参数调用CFRelease,仔细一看原来写错地方了,一定要注意这种情况,特别出现一些循环语句的时候。

至于ARC模式下有哪些是需要手动释放的呢?就我所知,CoreFoundation对象有时候需要CFReleasemalloc/calloc等有时候需要free,还有标准IO fopen之类的需要fclose

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,378评论 11 349
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 在有图片链接的时候,分享到微博,不像qq/微信那样直接带有链接,链接必须加到text里面,所以在保证弹出sheet...
    假面邂逅阅读 382评论 0 0
  • 相信大家都有这种体会:兴奋地买了一本书,收到后马上翻了几页,却立刻失去了阅读的兴致,以致于再也没有读完它,虽然你也...
    但行耕者阅读 449评论 1 7