iOS開發巨集定義(#define)注意
阿新 • • 發佈:2018-12-04
在開發中常用#define來記錄各種數值,一般情況下是沒有問題的,但是當巨集中有加減運算,並被用於乘除等運算中時計算的數值就可能不準確。
舉例
#define kItemWith self.bounds.size.height - 10
這裡定義了一個item的長度,正常情況下使用時沒有問題的,
在運算中
控制檯輸出
可以看到kItemWith = 90, 所以希望得到的運算結果 value 應該等於360,但是得到的卻是60.
原因分析
巨集定義實際上就是儲存了一段程式碼(運算)
在該例子中呼叫巨集定義時的展開: kItemWith self.bounds.size.height - 10,也就是 100 - 10
在運算時的展開:kItemWith *4 等於 self.bounds.size.height - 10 * 4 = 100 - 40 = 60
解決方法
經過原因分析後,其實只要在涉及運算的巨集定義上加上"()"就行了
#define kItemWith (self.bounds.size.height - 10)
另外在開發中儘量少用巨集,在不涉及self.bounds的情況下可以使用static CGFolat const kWidth = 20;這種方式代替