iOS開發中常常用到#define
進行文本替換,const
修飾數據類型。下面說一下他們的使用細節。git
#define
放在程序開始,在#import
以後,也能夠放在其餘任何位置,可是必須先定義後引用。\
,用以告訴預處理程序這裏存在一個後續。使用
#define
定義的宏可使用#undef
命令取消定義。github
另外說一下NSString const *var
和 NSString * const var
的區別。常常遇到的有objective-c
const NSString *var
NSString const *var // 與上一個意義相同
NSString * const var
複製代碼
const NSString *var
和NSString const *var
沒有區別。由於NSString
自己就是不可變的,此處的const
沒有任何用途。const
右側的爲定義的常量,沒法修改。bash
var
不能作任何修改。static NSString * const var; // a
static NSString const * const var; // 與a相同,第一個const沒有任何用途
static const NSString * const var; // 與a相同,第一個const沒有任何用途
複製代碼
var
對象的值不能修改,但能夠修改指針指向。static NSString * var; // b
static NSString const * var; // 與b相同,const沒有任何用途
static const NSString * var; // 與b相同,const沒有任何用途
複製代碼
var
對象的值能夠改變,指針指向不能改變。static NSMutableString * const var; // c
複製代碼
pro648
對象的值和指針均可以改變。static NSMutableString * pro648; // d
複製代碼
下面代碼表明的是pro648
指針指向地址被改變了,即開始時指向@"a"
,後來指向@"b"
,而不是字符串@"a"
改變了。app
pro648 = @"a";
pro648 = @"b";
複製代碼
事實上不能修改
NSString
對象的內容,NSMutableString
對象可使用appendString:
方法修改。spa
若是聲明pro648
變量方法是:3d
NSString const *pro648
複製代碼
最後pro648
會指向@"b"
。若是聲明pro648
變量方法是:指針
NSString * const pro648
複製代碼
當嘗試爲pro648
再次賦值時,即修改其指針指向時,編譯器會發出*Can not assign to variable 'var' with const-qualified type 'NSString * const-strong'*的警告。code
參考資料:對象
歡迎更多指正:github.com/pro648/tips…