zoukankan      html  css  js  c++  java
  • iOS性能调优之Analyze静态分析

    之前遇到一个同事写的 陈年老工程,需要尽快的时间修改里面的东西,急用,让我帮忙。那就帮着看看。

    而Analyze这个工具 真是好用。

    工程存在严重的内存泄漏。  如果不解决  很容易就会出现崩溃等现象。  于是 乎  就用 Analyze 进行了 初步的检查,检查后,我去,一下子傻眼了,竟然有将近300个警告,和  200个 泄漏内存的蓝色警告。  那就一个一个改吧,  这个可不能随便改,看到蓝色警告不能直接删除,要先看代码,分析清楚逻辑,确实这个代码没用,才能删除。  

    其实最不愿意改这种了,属于费力不讨好的活,花了很大的精力  和 很多的时间,到头来 boss 一看 ,页面怎么没动,是不是 偷懒没干活?

    会看的看门道,不会看的看热闹。这话一点没错!boss不知道你干了什么所以就一直催你,催完一个又一个。

    本来老板让估算时间,那就估了一个时间 n天。

    但是 老板却说  太多了 ,并做主 把时间压缩了三分之二。(早知道我就不用估算了,估算半天还不是得按照老板的时间来)

    那可叫人怎么搞?  于是乎 周末自己家里加班,反正加班也没加班费,干脆在家搞吧,去公司还要多出车费呢。

    反正挺坎坷,大家不知道 维护一个四、五年前经过一群人加工然后 还没加工出成果的  工程 是 多么的耗费精力 耗费时间,这个姑且不说,让人不爽的是  做了这么多, 老板一看页面没有变,  就说你 没有干活, 然后还会训斥你一顿,这下可省钱了,  不用吃饭了 ,直接 生气就饱了。

    还好,Analyze 比较只能,不用你去一个一个找哪里有泄漏, 要是一个一个找估计给三个月也不一定能搞完啊。

    下面就来说下 Analyze。

    以下内容参考自网友,略作修改,感谢分享

    相信IOS开发者在App进行Build或Archive时,会产生很多编译警告,这些警告是编译时产生的,静态分析的过程也类似,在XCode Product菜单下,点击Analyze对App进行静态分析。 

    iOS性能调优之Analyze静态分析

    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查看分析结果: 

    iOS性能调优之Analyze静态分析

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

    如果你没有使用ARC,那么Analyze更有用。 

    Analyze的其他三种分析也可以使用,相比编译器给出的信息更明确。 

    Analyze逻辑错误监测:

    iOS性能调优之Analyze静态分析

    这种情况在codereview时也较难发现,可以借助Analyze。 

    如上代码,当Tag不等于1、2和3的时候,就会出现很问题了。 

    Analyze还给出了箭头提示:len is a garbage value。建议在声明变量时,同时进行初始化。

  • 相关阅读:
    对struts2的简单理解
    对xml文件封装思想的处理
    反射技术
    设计模式之观察者模式
    设计模式之单例模式
    浅谈对象的克隆
    细说 过滤篇
    flex html 用flex展示html
    git同一文件由于文件名大小写不同导致不能合并
    关于C#引用Dll后,找不到命名空间的问题
  • 原文地址:https://www.cnblogs.com/isItOk/p/6120114.html
Copyright © 2011-2022 走看看