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

目前关于IOS性能优化的教程较少,决定写一个《IOS性能调优系列》,主要关注与内存泄漏、性能优化、流量和电量分析几个方面。性能优化

XCode已经提供了很是强大的性能调优工具,结合几个第三方工具和一些技巧,进行性能优化很是简单。框架

第一篇先写写最简单的,Analyze静态分析。工具

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

Analyze主要分析如下四种问题:优化

一、逻辑错误:访问空指针或未初始化的变量等;ui

二、内存管理错误:如内存泄漏等;3d

三、声明错误:从未使用过的变量;指针

四、Api调用错误:未包含使用的库和框架。code


 

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不等于一、2和3的时候,就会出现很问题了。

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


记录,为更好的本身!

相关文章
相关标签/搜索