創(chuàng)建常量的問題###
oc中有一些方法是創(chuàng)建常量的,但是具體用哪一種好呢?
- #define macro
- const(const int a = 1 跟 int const a=1 一樣都是修飾的a不可變)
- static const
- extern const
- enum (只可以定義integer類型的常量)
const
在標(biāo)準(zhǔn)C中const定義的變量是外連接的,即如果一個(gè)編譯單元中定義了一個(gè)全局const常量,則其在其他編譯單元中是可見的,如果其他編譯單元也定義了同名const常量就會(huì)產(chǎn)生重復(fù)定義錯(cuò)誤。
比如在 constViewController.m 文件中定義了 const int SONSTTEST = 1;
然后在 ViewController.m中也定義了const int SONSTTEST = 1;而ViewController.m并未引入constViewController.m,編譯器也會(huì)報(bào)錯(cuò)。
把const int SONSTTEST = 1;改為static const int SONSTTEST = 1;就是把const常量標(biāo)記為對(duì)外不可見
/----------指針常量----------/
NSString * const ptr1 = @"AB";
ptr1 = @"A"; //錯(cuò)誤,指針不可變,所以ptr1不可變
/----------常量指針---------/
const NSString *ptr1 = @"AB"; (從右往左讀,const修飾的是 *ptr1)
ptr1 = @"A"; //正確,*ptr1不可變,ptr1可變
extern
全局的變量
假如其他a類中已經(jīng)聲明了meString,你在另外一個(gè)b類中想使用這個(gè)變量,可以extern NSString* meString;會(huì)得到a類中同樣的值.
個(gè)人覺得如果使用局部的常量可以在.m中用
static const int a = 1
如果使用全局的常量的話可以使用
extern const, 比如在a類中聲明了 meString,在b中引入a.h就可以直接使用meString。 如果沒引入的話在b中extern NSString* meString;也能得到a類中同樣的值。 所以比較適合屬于某一個(gè)類中的全局常量,其他類可以直接使用。
如果使用屬于整個(gè)application的全局常量的話就可以使用
#define macro