目前關於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。建議在聲明變量時,同時進行初始化。
記錄,爲更好的本身!