const,static,extern的使用

1??.const和宏的區別
宏是預編譯,const是編譯時刻,只會編譯一次;宏不會檢查錯誤,const會檢查錯誤,常用的字符串通常使用const修飾;宏的優點是可以定義一段代碼,如果一個文件里面宏太多,會造成編譯時間過長.但是其實定義宏并不會消耗內存,只會分配一次內存地址.

2??.const的使用:只能修飾變量(基本數據類型,指針變量 (int *),對象變量),const修飾的變量,僅僅是修飾相鄰右邊的變量,表示只讀,不可以修改.
int const a = 10,a的值不可修改,但是仍然是變量,是個只讀變量.
const int a = 10,a也是只讀變量
用const修飾指針變量

 int a = 10;
 int *const p = &a    //p:只讀變量, *p:變量
 const int *p = &a    //*p:只讀變量, p:變量
 int const *p = &a    //*p:只讀變量,p:變量
 int const * const p = &a    //*p:只讀,p:只讀
 const int *const p = &a     //*p:只讀,p:只讀

3??.const的使用場景
1.全局只讀變量NSString *const name = @"little prince"
2.方法中定義個只讀參數;-(void)test:(NSString * const)name方法中就不可以修改name的值了.

4??.static
1:修飾局部變量,會延長局部變量的生命周期,只要程序運行,局部變量一直存在,而且只會分配一次內存.

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{ // static:修飾的變量,程序一運行就會分配一次內存
   static int i = 0;
    i++;
    NSLog(@"%d",i);//i的值一直增加
}

2.修飾全局變量:只會修飾全局變量的作用域,表示只能是當前類內中可以使用.

???.extern
只能申明一個變量,不能定義變量,修飾的變量不能初始化.一般用于申明全局變量,全局變量和VC的加載沒有關系.比如在ViewController.m中申明一個全局 int i = 3,在AppDelegate.m中extern int i.并且打印i可以得到值3.

6??.static 和const修飾全局變量,
static修飾全局變量,修改作用域,在當前文件中使用,const表示變量只讀的.聯合修飾時靜態全局只讀變量.Static NSString * const name = @"rose";

7??.extern和const聯合使用,全局的只讀變量
extern NSString * const name = @"rose"

8??.我們可以創建一個文件,在.m中定義全局變量.需要在.m中導入Foundation框架.然后寫入全局變量,防止重復使用變量名.可以用UIKIT_EXTERN來代替extern,顯得高大上點.

以上??

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容