最近項目做完了,開始進行優化,第一件事就是消除編譯警告。編譯警告雖然不會導致項目崩潰,但是看著煩。一邊消除一邊記錄下。
1、屬性聲明問題
源代碼長這個樣子:
@property (nonatomic) id value;
很明顯是缺省屬性聲明的問題,警報的意思就是說:沒有明確的指明這個屬性是assign
,retain
,還是copy
,現在編譯器默認這是 assign
類型的,但這對于id
這種non-GC
類型的變量不適用。查看下這里代碼的需求,發現這個地方應該用strong
,添加上strong
屬性后,警告消失。
2、類型轉換的姿勢不對
可以使用Xcode提示的那樣進行修改,但建議把前面的格式化符號改為 %zd
,即是這個樣子:
NSString *str = [NSString stringWithFormat:@"%zd", i];
這樣表示一個size_t
值(sizeof
返回的類型),而不是強制轉換,就不會存在丟失精度什么問題了。(個人的理解,如果不對,望指正)
3、方法的返回的類型,與方法定義的類型不一致。如是枚舉型,但定義的時候定義的是NSUInteger
將返回值類型修改為枚舉型即可。
4、.h
中聲明方法的參數類型和.m
實現時方法的參數類型不一致
這是個非常蠢的問題,統一一下就好了。
5、README,LICENCE,gitkeep文件不能編譯的警告,像是這個樣子:
刪掉對應文件就好了。
6、百度地圖的警告
警告提示的是百度 BaiduMapAPI.framework
框架里面使用雷達的幾個類支持的最低系統版本是 iOS8.2,而我門開發的App是從 iOS7 開始適配的,暫時道行不夠,這個幾個警告表示無可奈何。(如果你有解決方案,還請告知,感激不盡)
7、參數類型傳錯了
這里需要一個 BOOL
類型,但是傳了一個控制器類型的,竟然沒有崩潰??,醉了。
8、使用了已經被棄用的 API
解決方案:換成提示讓使用的 API。
這次解決編譯警告遇到的問題就這么多,以后如果再遇見其它的,再添加。
下篇見~