(整理記錄網上別人的博客學習)(未完。。)
http://www.cnblogs.com/ym123/p/4309400.html
http://www.lxweimin.com/p/09c5141d4531
1??專門的性能調優工具
靜態分析工具–Analyze
在App進行Build或Archive時,會產生很多編譯警告,這些警告是編譯時產生的,靜態分析的過程也類似,在XCode Product菜單下,點擊Analyze對App進行靜態分析。
Analyze主要分析以下四種問題:
- 邏輯錯誤:訪問空指針或未初始化的變量等;
- 內存管理錯誤:如內存泄漏等;
- 聲明錯誤:從未使用過的變量;
- Api調用錯誤:未包含使用的庫和框架。
手動靜態分析:每次都是通過點擊菜單欄的Product -> Analyze或快捷鍵shift + command + b
自動靜態分析:在Build Settings啟用Analyze During 'Build',每次編譯時都會自動靜態分析
靜態分析結果如下:
聲明錯誤、邏輯錯誤、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。建議在聲明變量時,同時進行初始化。