IOS效能調優系列:Analyze靜態分析

來源:互聯網
上載者:User

標籤:

目前關於IOS效能最佳化的教程較少,決定寫一個《IOS效能調優系列》,主要關注與記憶體流失、效能最佳化、流量和電量分析幾個方面。

XCode已經提供了非常強大的效能調優工具,結合幾個第三方工具和一些技巧,進行效能最佳化非常簡單。

第一篇先寫寫最簡單的,Analyze靜態分析。

相信IOS開發人員在App進行Build或Archive時,會產生很多編譯警告,這些警告是編譯時間產生的,靜態分析的過程也類似,在XCode Product菜單下,點擊Analyze對App進行靜態分析。

Analyze主要分析以下四種問題:

1、邏輯錯誤:訪問null 指標或未初始化的變數等;

2、記憶體管理錯誤:如記憶體流失等;

3、聲明錯誤:從未使用過的變數;

4、Api調用錯誤:未包含使用的庫和架構。

 

Analyze記憶體流失分析:

聲明錯誤、邏輯錯誤、Api調用錯誤基本在編譯時間都會有警告,Analyze的主要優勢在於靜態分析記憶體流失及代碼邏輯錯誤。

比如在開啟arc的環境下,輸入以下一段代碼:

12345678910111213 //截取部分映像+(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。建議在聲明變數時,同時進行初始化。

IOS效能調優系列:Analyze靜態分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.