• 使用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。建议在声明变量时,同时进行初始化。

Xcode执行Analyze静态分析相关推荐

  1. iOS实录15:浅谈iOS Crash

    导语:在当前的iOS开发中,虽然ARC为开发者解决了手动内存管理时代 的许多麻烦,但是内存方面的问题依然是产生iOS Crash的元凶之一,本文介绍内存方面,有关僵尸对象.野指针.内存泄漏.废弃内存这 ...

  2. 【iOS沉思录】BAD_ACCESS内存错误调试

    BAD_ACCESS 在什么情况下出现 BAD_ACCESS 报错属于内存访问错误,会导致程序崩溃,错误的原因是访问了野指针(悬挂指针).野指针指的是本来指针指向的对象已经释放了,但指向该对象的指针没 ...

  3. 使用Xcode和Instruments调试解决iOS内存泄露(转)

    转自:http://blog.csdn.net/totogo2010/article/details/8233565 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还 ...

  4. 使用Xcode和Instruments调试解决iOS内存泄露【转】

    转载自:http://blog.csdn.net/totogo2010/article/details/8233565 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露 ...

  5. 使用Xcode和Instruments调试解决iOS内存泄露

    虽然iOS 5.0版本之后加入了ARC机制,但由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要. 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露 ...

  6. iOS 【使用Xcode和Instruments调试解决iOS内存泄露】

    虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要. 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露, ...

  7. xcode怎样分析检测内存泄露(iOS)

    虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要. 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露, ...

  8. 在Xcode中使用Git进行源码版本控制

      本文翻译自Understanding Git Source Control in Xcode (译者myShire)欢迎您加入我们的翻译小组. 在应用程序开发过程中,很重要的一部分工作就是如何进行 ...

  9. Xcode终端快捷键

    Xcode 直接打开终端 Xcode作为开发编辑器,居然不能直接打开终端,所以就没有快捷键,但是可以借助自定义 Behavior 来执行脚本,这样就有快捷键了,比如我的CMD + Shift + T. ...

最新文章

  1. python多进程断点续传分片下载器
  2. 【Android工具】安卓手机淘宝双十二活动脚本,1212淘宝冲能量半自动程序
  3. iviewtable表格数据 录音播放下载
  4. redis 支持 json_Spring Boot 中集成 Redis
  5. 【事务】:数据库事务隔离级别、脏读、幻读、不可重复读
  6. 【BZOJ3916】friends(hash+分情况讨论)
  7. 计算机二级题库office基础知识,计算机二级office题库
  8. 卸载Windows的引导界面中的变色龙选项
  9. python新年倒计时代码
  10. 工信部《全国区块链和分布式记账技术标准化技术委员会组建公示》
  11. [Android问答] 如何获得手机屏幕分辨率?
  12. linux 子接口 非vlan,VLAN之间通过子接口通信配置示例
  13. Excel 2010 SQL应用098 聚合函数之计算某列空值的数目
  14. 【华人学者风采】汪萌 合肥工业大学
  15. 网站QQ客服链接代码
  16. 2022-08-15 第六小组 瞒春 学习笔记
  17. 文章标题warning: could not load any Objective-C class information. This will significantly reduce the qu
  18. 常间的黑客攻击手段以及预防方法整理
  19. (论文加源码)基于DEAP脑电数据集的脑电情绪识别(利用生成对抗性网络进行特征提取和数据扩充)
  20. 1999-2021地级市GDP及一二三产业GDP数据

热门文章

  1. java对象序列化作用_Java学习之——理解对象序列化
  2. ctb伺服驱动器说明书_青岛FANUC伺服电机364、453故障维修
  3. vue 生命周期_Vue 生命周期
  4. JVM、JRE和JDK的概念
  5. java 坐标系转换_入门-Python-GIS坐标转换
  6. mysql.max links_Mysql的max_allowed_packet设定
  7. maven配置阿里云镜像后Eclipse不生效解决办法
  8. python executemany
  9. 两个单链表生成相加链表
  10. 什么是pretext tasks?