- 前言
很多人搞不懂這種問題刊橘,打算整理一篇文章當(dāng)自己忘記的時(shí)候,也可以翻來看看
- 目錄
1. extern const static define 用法
2. 深層次理解 extern const static define
一 . extern const static 用法
const 一般用來定義一個(gè)常量
// 不可以被修改
NSString* const text = @"Text";
// 可以被修改
NSString const *text = @"Text";
- extern
外部變量颂鸿,引用其他類的全局變量
.m 文件中
NSString* const scheme = @"Scheme";
.h 文件中
extern NSString* const scheme;
在其他文件中可以直接訪問促绵。
或者采用下面這種寫法:
在一個(gè)文件中
NSString * const str = @"123";
在另外一個(gè)文件中引用的時(shí)候:
extern NSString* str;
- static 修飾的變量是一個(gè)私有的全局變量
作用: 延長局部變量的生命周期,程序結(jié)束時(shí)才會銷毀
例如: 在一個(gè)文件中聲明:
static NSString* const scheme = @"Scheme";
在另外一個(gè)文件中聲明 :
extern NSString* scheme;
編譯階段不會報(bào)錯据途,但是在運(yùn)行期绞愚,會報(bào)如下錯誤:
E9C6FC8D-45E3-4A0F-9472-853FD6AB1B5D.png
- define
是一條預(yù)編譯指令,編譯器在編譯階段會將所有使用到的地方簡單的進(jìn)行替換
用法:
#define SCHEME 100
二 . 深層次理解 extern const static define
const 和 define
相同點(diǎn):
const 和 define 都能定義一個(gè)常量颖医,都能實(shí)現(xiàn)修改值修改一次位衩,
所有用上該變量的值都能做到同步的修改,
這樣代碼就變得易于維護(hù)熔萧,提高代碼的效率糖驴。
不同點(diǎn):
const 給出的是對應(yīng)內(nèi)存的地址,所以const定義的常量在程序運(yùn)行過程中只有一份拷貝
而 #define 定義的常量在內(nèi)存中有若干個(gè)拷貝
宏能做到 const 做不到的事情:
1. 宏能定義函數(shù)
2. 宏能根據(jù)傳入的參數(shù)生成字符串
#define string(str1,str2) #str1#str2