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

时间: 2024-12-16 07:30:41

iOS性能调优之Analyze静态分析的相关文章

IOS性能调优系列:Analyze静态分析

目前关于IOS性能优化的教程较少,决定写一个<IOS性能调优系列>,主要关注与内存泄漏.性能优化.流量和电量分析几个方面. XCode已经提供了非常强大的性能调优工具,结合几个第三方工具和一些技巧,进行性能优化非常简单. 第一篇先写写最简单的,Analyze静态分析. 相信IOS开发者在App进行Build或Archive时,会产生很多编译警告,这些警告是编译时产生的,静态分析的过程也类似,在XCode Product菜单下,点击Analyze对App进行静态分析. Analyze主要分析以下

IOS性能调优系列:使用Zombies动态分析内存中的僵尸对象

硬广:<IOS性能调优系列>第四篇,预计会有二十多篇,持续更新,欢迎关注. 前两篇<IOS性能调优系列:Analyze静态分析>.<IOS性能调优系列:使用Instruments动态分析内存泄漏>关注了内存泄露的问题,本篇正好相反,关注的是内存中那些被过度释放的对象(overreleased objects). 这篇的标题纠结了半天,到底是写EXC_BAD_ACCESS错误调试,还是写内存中僵尸对象的分析,最后还是选了个Duang~Duang~的标题. 今天在论坛上看到

IOS性能调优系列:使用Instruments动态分析内存泄漏

硬广:<IOS性能调优系列>第二篇,持续更新,欢迎关注. 第一篇介绍了Analyze对App做静态分析,可以发现应用中的内存泄漏问题,对于有些内存泄漏情况通过静态分析无法解决的,可以通过动态分析来发现,分析起来更有针对性. 从本篇开始介绍XCode提供的强大的分析工具Instruments,内存分析只是Instruments中的一个功能,其他功能后续介绍. 使用Instruments动态分析内存泄漏 Instruments中的Leaks功能主要用于分析内存泄漏,还是以<IOS性能调优系列

IOS性能调优系列:使用Allocation动态分析内存使用情况

硬广:<IOS性能调优系列>第三篇,持续更新,欢迎关注. <IOS性能调优系列:Analyze静态分析>介绍了使用静态分析方法查找IOS内存泄漏的方法,<IOS性能调优系列:使用Instruments动态分析内存泄漏>讲解了使用Instruments的Leaks工具动态分析内存泄漏. 这两篇都是关注于内存泄漏的,是内存调优首先要关注的方面. 关于内存的问题,除了内存泄漏以外,还可能存在内存不合理使用的情况,也会导致IOS内存警告. 内存的不合理使用往往比内存泄漏更难发现

IOS性能调优系列:使用Time Profiler发现性能瓶颈

硬广:<IOS性能调优系列>第五篇,预计会有二十多篇,持续更新,欢迎关注. 之前四篇都是关注于内存方面,分析了内存泄漏.僵尸对象.内存分配,本篇介绍Time Profiler工具的使用,开始真正的“性能”调优之旅. Time Profiler还有之前介绍过的Leaks.Allocations工具,被戏称为Instruments的救命三招,是当应用遇到问题时首先应当使用的三个工具. Time Profiler帮助我们分析代码的执行时间,找出导致程序变慢的原因,告诉我们“时间都去哪儿了?”. 在使

iOS性能调优总结

引言 说起性能调优,我本来想说很多,但是觉得枯燥的语言并不能表达我对于性能调优的重视,所以我打算举个不太恰当的例子. 曾经有这么一家工厂,他们的产品从原材料到出厂一共需要经过30条产品线. 这家公司的老板对底下的员工曾多次强调过质量的重要性,员工们却不以为然,他们觉得自己做的都很不错. 有一次,老板去视察,走到了一条产品线上,问起工人,这条产品线的合格率能达到多少,那个工人自豪的说,"98%!".老板却并没有十分满意,摇着头走开了. 那位工人非常的疑惑.这么高的合格率,老板为什么还是不

IOS性能调优系列(全)

总结: 三类工具 基础工具 (NSLog的方式记录运行时间.) 性能工具.检测各个部分的性能表现,找出性能瓶颈 内存工具.检查内存正确性和内存使用效率 性能工具: 可以衡量CPU的使用,时间的消耗,电池的消耗 一.Time Profile 启动Time Profile:Xcode ——> Product ——> Profile ——> Time Profile 使用Time Profiler调试程序,能获取到整个应用程序运行中所消耗的时间分布和百分比 使用Time Profile前有两点

iOS应用性能调优的25个建议和技巧

目录 我要给出的建议将分为三个不同的等级: 入门级. 中级和进阶级: 入门级(这是些你一定会经常用在你app开发中的建议) 1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier 3. 尽可能使Views透明 4. 避免庞大的XIB 5. 不要block主线程 6. 在Image Views中调整图片大小 7. 选择正确的Collection 8. 打开gzip压缩 中级(这些是你可能在一些相对复杂情况下可能用到的) 9. 重用和延迟加载Views 10. Cache, C

(转) iOS应用性能调优的25个建议和技巧

From: http://www.cocoachina.com/ios/20150408/11501.html 英文原文:raywenderlich,感谢@路塔石 的热心翻译.:) 译文链接:http://blog.jobbole.com/37984/ 写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcel