Analyze分析内存

转载 2016年08月30日 09:37:52
  • 使用Xcode自带的静态分析工具 Product->Analyze(快捷键command+shift+B)可以找出代码潜在错误,如内存泄露,未使用函数和变量等

所谓静态内存分析, 是指在程序没运行的时候, 通过工具对代码直接进行分析
根据代码的上下文的语法结构, 让编译器分析内存情况, 检查是否有内存泄露

Analyze主要分析以下四种问题:

  • 1、逻辑错误:访问空指针或未初始化的变量等;
  • 2、内存管理错误:如内存泄漏等; 比如ARC下,内存管理不包括core foundation
  • 3、声明错误:从未使用过的变量;
  • 4、Api调用错误:未包含使用的库和框架。

    缺点: 静态内存分析由于是编译器根据代码进行的判断, 做出的判断不一定会准确, 因此如果遇到提示, 应该去结合代码上文检查一下

// 面向用户的文本应该使用本地化的字符串宏
1.user-facing text should use localized string macro

此为代码中配置了本地化,面向用户的应该用字符串宏,而我们直接赋值为汉字,因此,此提示可以忽略.


2.instance variable used while 'self' is not set to the result of '[(super or self) init...]

// 此方法提示错误
- (instancetype)initWithType:(FTFFavorateType)type
{
    if (self == [super init]) {
        _type = type;
    }
    return self;
}

修改为如下

- (instancetype)initWithType:(FTFFavorateType)type
{
    if (self = [super init]) {
        _type = type;
    }
    return self;
}

// 在初始化过程中存储的“持续时间值”的值永远不会被读取
3.Value stored to ‘durationValue’ during its initialization is never read

// 此段代码提示错误
NSMutableArray *datesArray = [[NSMutableArray alloc] init];
datesArray = [_onDemandDictionary objectForKey:key];

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

修改为如下

NSMutableArray *datesArray = nil;
datesArray = [_onDemandDictionary objectForKey:key];

Analyze已经分析出imageRef对象有内存泄漏,这种情况在编译时是无法发现的。
//截取部分图像

+(UIImage*)getSubImage:(unsigned long)ulUserHeader
{
    UIImage * sourceImage = [UIImage imageNamed:@"header.png"];
    CGFloat height = sourceImage.size.height;
    CGRect rect = CGRectMake(0 + ulUserHeader*height, 0, height, height);

    CGImageRef imageRef = CGImageCreateWithImageInRect([sourceImage CGImage], rect);
    UIImage* smallImage = [UIImage imageWithCGImage:imageRef];
    //CGImageRelease(imageRef);

    return smallImage;
}

Analyze逻辑错误监测:


test.png

这种情况在codereview时也较难发现,可以借助Analyze。
如上代码,当Tag不等于1、2和3的时候,就会出现很问题了。
Analyze还给出了箭头提示:len is a garbage value。建议在声明变量时,同时进行初始化。



文/船长_(简书作者)
原文链接:http://www.jianshu.com/p/2e4f7553659c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

XZ_iOS之"User-facing text should use localized string macro”警告的解决

"User-facing text should use localized string macro”警告的解决
  • understand_XZ
  • understand_XZ
  • 2017年04月15日 10:03
  • 816

Objective-C 警告相关说明

原文地址:http://nshipster.com/clang-diagnostics/
  • icmmed
  • icmmed
  • 2014年09月03日 16:36
  • 9917

Android Lint 检查规则列表

英文原文: http://tools.android.com/tips/lint-checks 这里的Android Lint所检查规则列表是从ADT21中得来的默认的,在Android S...
  • qq_29134495
  • qq_29134495
  • 2016年05月24日 09:30
  • 1454

安卓学习杂记——关于should use @string resource警告的消除

本人初学安卓,同样遇到这个问题百思不得其解,自己在网上查了些资料但是感觉还是不够细致,自己单独写一份,可以加深印象,又希望可以帮助后来人。   我们找到如图箭头所示的文件,双击打开 打开图片...
  • cry_C
  • cry_C
  • 2013年07月10日 09:07
  • 1226

使用Analyze 和Instruments-Leaks分析解决iOS内存泄露

使用Analyze 和Instruments-Leaks分析解决iOS内存泄露  使用Analyze和Instrument...
  • qq_19678579
  • qq_19678579
  • 2017年07月31日 17:12
  • 235

【iOS开发-116】内存测试管理和优化:Analyze和Profile,以及iOS开发常用工具simPholders、fabric

内存测试管理和优化:Analyze和Profile,以及iOS开发常用工具simPholders、fabric
  • wsb200514
  • wsb200514
  • 2015年01月30日 09:42
  • 1464

Analyze查找静态内存泄漏

使用Analyze查找静态内存泄漏,Analyze静态分析只是一个理论上的预测过程,其查找到的内存泄漏称为可疑泄漏点,之所以称为“可疑泄漏点”,是因为这些点未必一定泄漏,确认这些点是否泄漏还要通过Pr...
  • potato512
  • potato512
  • 2017年11月15日 17:11
  • 51

iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码

原文传送门 总结的不错 叮咚~   http://www.w2bc.com/article/85256 一. 一些相关概念 很多人应该比较了解这块内容了...可以权当复习复习.....
  • yuqingzhude
  • yuqingzhude
  • 2016年01月27日 17:48
  • 514

iOS 检测内存泄漏Analyze-Potential leak of an object stored into 'soundFileURLRef'

由于iOS中CF框架需要自己释放内存,所以ARC的自动释放内存就不管用了,需要我们自己释放,需要使用CFRelease()这个方法来手动释放内存. 以下三个案列是自己在自己的项目中截取的. 案...
  • goldWave01
  • goldWave01
  • 2016年12月13日 10:49
  • 563

静态检测内存泄露Analyze--Value stored to 'dataArr' during its initialization is never read

最近项目快要结束了,今天就使用Analyze检测了一下看是否有内存泄漏!这一检测,好吧!应用中发现了好多一些细节的问题导致的内存泄漏,就贴出来供大家参考下。项目里面我又这样一段代码: NSMut...
  • sinat_30898863
  • sinat_30898863
  • 2016年04月13日 12:16
  • 2773
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Analyze分析内存
举报原因:
原因补充:

(最多只允许输入30个字)