使用Analyze静态分析代码

在Xcode的工具栏中,有一个Product,Product里面的工具,可以说是Xcode中比较强大的,工程性能的调优都依赖于这些。

这篇就简单说下Analyze,毕竟现在都用ARC开发,如不使用CoreFoundation开发,内存泄露的情况不容易发生。

Analyze主要的作用有:

  • 内存泄露检查 Memory Error
  • 逻辑错误检查 Logic Error
  • 声明错误检查 Dead Store
  • API调用错误检查 API Misuse

点击Analyze后,Xcode会自动进行编译分析,需要一段时间,之后会像提示警告一样,提示有多少分析的结果。

所有的分析结果按照如上的类别,归类显示。点击某个错误的地方,会定位到出错的地方,然后点击向上向下的箭头,会详细展示出出错的步骤。


1、内存泄露检查 Memory Error

一般来说都是由于使用的CoreFoundation后没有release造成的。在RAC下Foundation框架下的不需要进行release,CoreFoundation框架下仍然需要release。

如下:如果没有CGPathRelease(path);就会造成内存泄露,path的retainCount在这段代码使用后仍未retainCount+1。



2、逻辑错误检查 Logic Error


- (NSInteger)typeIndexStatus:(NSString *)status
{
    NSInteger index;
    if ([status isEqualToString:@"正常"]) {
        index = 1;
    }else if ([status isEqualToString:@"迟到"]){
        index = 2;
    }else if ([status isEqualToString:@"早退"]){
        index = 3;
    }else if ([status isEqualToString:@"缺卡"]){
        index = 4;
    }else if ([status isEqualToString:@"请假"]){
        index = 5;
    }else if ([status isEqualToString:@"外勤"]){
        index = 6;
    }else if ([status isEqualToString:@"旷工"]){
        index = 7;
    }
    return index;
}

初看这段代码,并没有觉得有什么不妥,根据字符串获得index的值。这个前提是字符串一定要按照这个规则提供,如果没有按照这个规则提供,则index就没有值。

通过Analyze分析,就检查出来了。





3、声明错误检查 Dead Store

很多时候我们创建了一些中间变量需要使用,但是在最终功能的实现上并没有用到这个变量。

但是这些变量依然留在代码中,没有删除。这就造成了内存的不必要的开销。

这对这部分变量,不需要的时候就要及时的删除。

同理:

创建类声明的属性,如果没有用到就要及时删除。因为创建类时,会根据类的属性的多少创建对应的内存。



4、API调用错误检查 API Misuse

API的错误,一般是在打段的逻辑处理中没有注意OC的使用细节。如:数组不能添加空值,数组的元素不能是空值,字典的value不能是空等等。

下面这段代码:

photo的初始值为空,经过一段逻辑处理后,还是有可能是空,是不能添加到数组中的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值