1. 程式人生 > >iOS開發巨集定義(#define)注意

iOS開發巨集定義(#define)注意

在開發中常用#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;這種方式代替