Clang靜態分析和Instruments來剖析代碼有一些不一樣,Clang更致力於在編譯的過程當中經過自身的一套判斷機制來找出代碼中潛在的隱患。php
在XCode 3.2以後的版本里,Clang已經被集成進來,Static Analysis 是基於 Clang 的很是好的靜態代碼分析工具。能夠從xcode直接運行Static Analysis 分析器。html
Static Analysis 優勢:xcode
一、使用操做容易。函數
二、可以在編碼階段,開發自行進行代碼檢查。早期發現代碼隱患。工具
三、直接分析源代碼來發現程序中的錯誤,而不須要實際運行。測試
四、自動檢測objective-C程序中的BUG,發現內存泄露和其它問題。編碼
五、內存問題發現越早,解決的代價就越小。3d
使用方法:code
一、確保你的程序沒有被編譯過(編譯過了就使用Clean all targets清除編譯)htm
二、點擊Product > Analyze以下圖:
三、若是你的程序代碼有問題,在編譯完成以後,右下角的原來提示warning 和 error的地方如今變成了這樣:
四、如今你能夠像解決之前的warning 或者 error同樣,對提示的地方點進去。
五、可能會存在問題的一些狀況:
各處內存泄漏:
對象引用隱患(內存已釋放可能又被使用了)
未使用到的函數:
未初始化的變量
數據賦值隱患:
The left operand of …… is a garbage value
分析解決方法(例:內存泄露)
一、點擊左側對應內存泄露某處,右側顯示泄露行
二、雙擊行所對應的信息,顯示交互詳情
三、修改代碼,解決泄露問題。
四、修改後再次靜態掃描發現,錯誤從40減到39,修復的代碼行已再也不出現錯誤。
注:上述工程截圖爲測試Demo
建議使用場景:
一、建議在開發編碼階段使用,直接分析源代碼來發現程序中的錯誤,而不須要實際運行,提早發現代碼隱患。
二、測試在冒煙測試時可先進行掃描,錯誤太多代碼修改量太大的狀況下可暫不介入測試,以避免形成返工。
若是在內存泄露中出現 potential leak of an object stored into
解決辦法:建立變量的時候儘可能使用靜態建立,由於靜態方法都添加了anturelease,若使用alloc,init時後面最好加上autorelease