IOS 基礎-define、const、extern、全局變量


 

這里介紹一下define、const、extern的用法、優劣以及要注意的地方。

 

1.define

   宏define是定義一個變量,沒有類型信息。define定義的常量在內存中有若干個拷貝。

   define可以定義常量,但是建議不要這么做,因為用define定以了的常量,其值可以改變。

   用define定義方法和變量的例子:

#define MAX(a,b) (a>b)?a:b

#define MYVALUE 10

 

2.const

   const修飾的變量是不可變的。

   const定義常量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內存中有若干個拷貝。

   編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。

   注意下面的const的用法:

static const int kCount = 1; //此處定義的kCount后面都不能改變值,如果改變,則報錯

static const NSString *kStr1 = @"alun1";//此處定義的kStr1可修改其值,但是修改過后他們的內存地址一樣。

static NSString const *kStr1 = @"alun1";//跟上面的定義寫法不同,但是結果一樣

static NSString* const kStr2 = @"alun2";//此處定義的kStr2不能改變,否則會發生錯誤

   根據上面的解析,可以知道,const定義的右邊的是不可以改變的,也就是說const修飾的是它右邊的部分

 

//打印 kStr1 的內存地址,都是相同的地址fasoeio
NSLog(@"內存地址: %x",&kStr1);
kStr1 =  @"alun1_alun1";
NSLog(@"內存地址: %x",&kStr1);

 

3.extern

   extern用來修飾全局變量。extern用在變量聲明中常常有這樣一個作用,你在*.c文件中聲明了一個全局的變量,這個全局的變量如果要被引用,就放在*.h中並用extern來聲明。。

.h頭文件中聲明

//.h文件中
extern NSString *const kName;

.m實現文件中賦值

//.m文件中
NSString *const kName = @"Alun Chen";


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM