性能调优

(整理记录网上别人的博客学习)(未完。。)
http://www.cnblogs.com/ym123/p/4309400.html
http://www.jianshu.com/p/09c5141d4531
1️⃣专门的性能调优工具
静态分析工具–Analyze
在App进行Build或Archive时,会产生很多编译警告,这些警告是编译时产生的,静态分析的过程也类似,在XCode Product菜单下,点击Analyze对App进行静态分析。

Analyze主要分析以下四种问题:

  1. 逻辑错误:访问空指针或未初始化的变量等;
  2. 内存管理错误:如内存泄漏等;
  3. 声明错误:从未使用过的变量;
  4. Api调用错误:未包含使用的库和框架。

手动静态分析:每次都是通过点击菜单栏的Product -> Analyze或快捷键shift + command + b


性能调优_第1张图片
166109-a890797a4457159d.png

自动静态分析:在Build Settings启用Analyze During 'Build',每次编译时都会自动静态分析


性能调优_第2张图片
166109-5c1dcdd871fcb891.png

静态分析结果如下:
性能调优_第3张图片
166109-6c032a57f0fef09b.png

声明错误、逻辑错误、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查看分析结果:


性能调优_第4张图片
021735528167744.png

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

Analyze逻辑错误监测:


性能调优_第5张图片
021739557542692.png

这种情况在codereview时也较难发现,可以借助Analyze。
如上代码,当Tag不等于1、2和3的时候,就会出现很问题了。Analyze还给出了箭头提示:len is a garbage value。建议在声明变量时,同时进行初始化。

你可能感兴趣的:(性能调优)