Instruments之Xcode Analyze 代碼靜態檢查及問題解決

Static Code Analysis(靜態代碼分析)用來發現源代碼潛在的錯誤與缺陷,源代碼編譯後只有在運行時有可能會產生細微的錯誤,他們可能難以識別和修復,因此這些潛在的威脅在開發過程當中必定要儘量清理乾淨,儘可能編寫的時候注意相似可能潛在的威脅與缺陷。擊查看蘋果Static Code Analysis官方介紹)html

一.能夠識別的問題與缺陷

1.邏輯缺陷,如訪問未初始化的變量和空指針

2.內存管理的缺陷,如分配後的內存泄漏

3.無效數據(未使用的變量)缺陷

4.使用api缺陷,不遵循庫或者框架的使用規則

示例:
ios

二,操做

  在Xcode 選項欄裏面選擇Product -> Analyze (快捷鍵: command + shift + B) ,點擊運行便可。    

三,問題列表

一、Localizability Issue (Apple) 

大概意思是:一、這裏是非本地化的文字 二、面向用戶的文本應使用本地化的字符串宏

別慌,下圖是 Xcode檢測到缺乏本地化~~~ 請看下面解決辦法api

 
檢查文字本地化

解決方法:在 Build Settings 裏面找到 Missing Localizability(缺乏本地化) 設置爲NO,就會忽略這個問題啦,  或者 , 你也能夠在應用裏面進行本地化。

xcode

二、Dead store  

無效數據: 意思就是有一些屬性或者對象初始化了又沒被使用 
問題代碼

解決方法:去掉初始化方法,直接賦值app

 

註釋:另一種處理方式,使用__unused註釋掉框架

__unused NSMutableArray *array = @[@"1",@"2"];  //使用__unused或者註釋掉

三、Logic error 邏輯錯誤

Converting a pointer value of type 'NSNumber *' to a primitive boolean value;instead,either compare the pointer to nil or call -boolValue(將類型爲「NSNumber *」的指針值轉換爲原始布爾值; 相反,要麼將指針與nil進行比較,要麼調用-boolValue) 

問題代碼:使用NSNumber做爲判斷條件的時候,沒有指定類型,編譯器不知道怎麼判斷ui

解決辦法:指定 NSNumber 對象與 nil 進行比較spa

 

四、Memory error 內存錯誤

nil passed to a callee that requires a non-null 1st parameter(nil傳遞給須要非null第一個參數的被調用者)

問題代碼:param 可能爲nil 指針

解決辦法:一般這種狀況下,只須要添加一個非空判斷,保證傳入的參數不爲空便可code

五、Core Foundation/Objective-C

 問題代碼
 
1. 假設條件不成立
 

2. 在未設置爲'[(超級或自我)初始化...]的結果時返回「自我」



解決辦法:

  去掉一個「=」 號,或者把 self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 提出來放 if 條件前面

相關文章
相關標籤/搜索