iOS性能调优之Analyze静态分析
之前遇到一个同事写的 陈年老工程,需要尽快的时间修改里面的东西,急用,让我帮忙。那就帮着看看。
而Analyze这个工具 真是好用。
工程存在严重的内存泄漏。 如果不解决 很容易就会出现崩溃等现象。 于是 乎 就用 Analyze 进行了 初步的检查,检查后,我去,一下子傻眼了,竟然有将近300个警告,和 200个 泄漏内存的蓝色警告。 那就一个一个改吧, 这个可不能随便改,看到蓝色警告不能直接删除,要先看代码,分析清楚逻辑,确实这个代码没用,才能删除。
其实最不愿意改这种了,属于费力不讨好的活,花了很大的精力 和 很多的时间,到头来 boss 一看 ,页面怎么没动,是不是 偷懒没干活?
会看的看门道,不会看的看热闹。这话一点没错!boss不知道你干了什么所以就一直催你,催完一个又一个。
本来老板让估算时间,那就估了一个时间 n天。
但是 老板却说 太多了 ,并做主 把时间压缩了三分之二。(早知道我就不用估算了,估算半天还不是得按照老板的时间来)
那可叫人怎么搞? 于是乎 周末自己家里加班,反正加班也没加班费,干脆在家搞吧,去公司还要多出车费呢。
反正挺坎坷,大家不知道 维护一个四、五年前经过一群人加工然后 还没加工出成果的 工程 是 多么的耗费精力 耗费时间,这个姑且不说,让人不爽的是 做了这么多, 老板一看页面没有变, 就说你 没有干活, 然后还会训斥你一顿,这下可省钱了, 不用吃饭了 ,直接 生气就饱了。
还好,Analyze 比较只能,不用你去一个一个找哪里有泄漏, 要是一个一个找估计给三个月也不一定能搞完啊。
下面就来说下 Analyze。
以下内容参考自网友,略作修改,感谢分享
相信IOS开发者在App进行Build或Archive时,会产生很多编译警告,这些警告是编译时产生的,静态分析的过程也类似,在XCode Product菜单下,点击Analyze对App进行静态分析。

Analyze主要分析以下四种问题:
1、逻辑错误:访问空指针或未初始化的变量等;
2、内存管理错误:如内存泄漏等;
3、声明错误:从未使用过的变量;
4、Api调用错误:未包含使用的库和框架。
Analyze内存泄漏分析:
声明错误、逻辑错误、Api调用错误基本在编译时都会有警告,Analyze的主要优势在于静态分析内存泄漏及代码逻辑错误。
比如在开启arc的环境下,输入以下一段代码:
//截取部分图像
+(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;
}
用注释注释掉CGImageRelease(imageRef)这行,虽然开起了arc,不过仍然会导致imageRef对象泄漏。
使用Analyze进行分析,在导航栏Analyze选择Analyzer查看分析结果:

Analyze已经分析出imageRef对象有内存泄漏,这种情况在编译时是无法发现的。
如果你没有使用ARC,那么Analyze更有用。
Analyze的其他三种分析也可以使用,相比编译器给出的信息更明确。
Analyze逻辑错误监测:

这种情况在codereview时也较难发现,可以借助Analyze。
如上代码,当Tag不等于1、2和3的时候,就会出现很问题了。
Analyze还给出了箭头提示:len is a garbage value。建议在声明变量时,同时进行初始化。
iOS性能调优之Analyze静态分析的更多相关文章
- IOS性能调优系列:Analyze静态分析
目前关于IOS性能优化的教程较少,决定写一个<IOS性能调优系列>,主要关注与内存泄漏.性能优化.流量和电量分析几个方面. XCode已经提供了非常强大的性能调优工具,结合几个第三方工具和 ...
- IOS性能调优系列:使用Instruments动态分析内存泄漏
硬广:<IOS性能调优系列>第二篇,持续更新,欢迎关注. 第一篇介绍了Analyze对App做静态分析,可以发现应用中的内存泄漏问题,对于有些内存泄漏情况通过静态分析无法解决的,可以通过动 ...
- IOS性能调优系列:使用Zombies动态分析内存中的僵尸对象
硬广:<IOS性能调优系列>第四篇,预计会有二十多篇,持续更新,欢迎关注. 前两篇<IOS性能调优系列:Analyze静态分析>.<IOS性能调优系列:使用Instrum ...
- IOS性能调优系列:使用Allocation动态分析内存使用情况
硬广:<IOS性能调优系列>第三篇,持续更新,欢迎关注. <IOS性能调优系列:Analyze静态分析>介绍了使用静态分析方法查找IOS内存泄漏的方法,<IOS性能调优系 ...
- IOS性能调优系列:使用Time Profiler发现性能瓶颈
硬广:<IOS性能调优系列>第五篇,预计会有二十多篇,持续更新,欢迎关注. 之前四篇都是关注于内存方面,分析了内存泄漏.僵尸对象.内存分配,本篇介绍Time Profiler工具的使用,开 ...
- iOS 性能调优
1.内存空间的划分: 我们知道,一个进程占用的内存空间,包含5种不同的数据区:(1)BSS段:通常是存放未初始化的全局变量:(2)数据段:通常是存放已初始化的全局变量.(3)代码段:通常是存放程序执行 ...
- iOS性能调优
写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/ ...
- 关于iOS性能调优
性能调优一直都是作为高阶iOS开发者的一个入门门槛,下面我搜集了日常查阅资料中见到的各种高质量调优博文,仅供参考 UIKit性能调优实战讲解 iOS 高效添加圆角效果实战讲解
- iOS性能调优系列(全)
总结: 三类工具 基础工具 (NSLog的方式记录运行时间.) 性能工具.检测各个部分的性能表现,找出性能瓶颈 内存工具.检查内存正确性和内存使用效率 性能工具: 可以衡量CPU的使用,时间的消耗,电 ...
随机推荐
- Sharepoint 2013 系列篇(安装部署)--上篇
前言 sharepoint的部署是按照物理拓扑图的架构来部署,按照物理拓扑图架构分为一层拓扑图架构,二层拓扑图架构,三层拓扑图架构,多层拓扑图架构. 按照分层的拓扑图部署是按照需求来划分的,一层拓扑图 ...
- 默认样式重置 (css reset)
body,p,h1,h2,h3,h4,h5,h6,dl,dd,t{margin:0; font-size:12px;/* font-family:XX; */} ol,ul{list-style:no ...
- 修改jar中的class文件
在工作中有可能会遇到需要修改jar的情况.正常情况下,如果有源代码的话,就比较容易,直接修改源代码,再导出新的jar文件即可.但是如果没有源代码就比较麻烦了,下面记录了没有源代码的情况修改jar的方法 ...
- JavaScript之延迟加载
本文参阅http://www.appelsiini.net/projects/lazyload Javascript Lazyload延迟加载特效,有效降低HTPP连接次数,提高首屏加载时间 1.增加 ...
- Java之经典Student问题2
创建5个学生对象给一个学生数组赋值,每个学生属性有:学号.姓名.年龄. 要求:1.给每个学生排序输出. 2.给所有学生年龄加1. 3.统计年龄大于20的学生人数. 在这里,我们用了compareT ...
- Unity Shader Prpperties
在 Unity 的材质面板(material inspector)上可以定义一系列的参数,对应于 Shader 中的的属性(Properties) 语法如下: Properties { Propert ...
- 通过Javascript数组设计一个省市联动菜单
通过Javascript数组设计一个省市联动菜单 使用Option内置类来完成下拉选项的创建 2.使用定时器实现一个时钟程序 3.使用PHP+JSON完成语音验证码 网址:http://yuyin.b ...
- QQ截图工具提取
今晚关了QQ,突然想截个图,但是呢又不想打开QQ了,于是在网上搜索截图工具,下载了几个,感觉都没有QQ截图好用.索性直接百度QQ截图工具提取,看到有些网站上有提取的,里面的文件有点多,不是我中意的,突 ...
- MyBatis用嵌套ResultMap实现一对多映射
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3959451.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Linux下安装Websphere MB所需的系统rpm包
很少使用到Linux,这次刚好用户有一个在linux下搭建Websphere MB/MQ的任务.试了几次都不行,经过多方打听,询问原来是少了rpm包的问题,但是,具体包名不详.. --#mount / ...