1:全局常量的定義:1:創建Header頭文件,再創建與Header頭文件類名相同的空文件作為.m文件,.h文件引用文件,.m文件負責定義常量
1 #import <UIKit/UIKit.h> 2 3 UIKIT_EXTERN const CGFloat XMGRed; 4 UIKIT_EXTERN const CGFloat XMGGreen; 5 UIKIT_EXTERN const CGFloat XMGBlue; 6 UIKIT_EXTERN const CGFloat XMGAlpha; 7 UIKIT_EXTERN const int XMGAge; 8 UIKIT_EXTERN NSString * const XMGName;
#import <UIKit/UIKit.h> const CGFloat XMGRed = 0.4; const CGFloat XMGGreen = 0.6; const CGFloat XMGBlue = 0.7; const CGFloat XMGAlpha = 1.0; const int XMGAge = 20; NSString * const XMGName = @"jack";
補充:1:若無法識別CGFloat結構體,則引入頭文件,
#import <UIKit/UIKit.h>
2:.m文件中定義的常量,用const修飾代表常量。其中const CGFloat a = 10.f; 和 CGFloat const a = 10.f;兩種寫法是一樣的,都代表a值為常量,不可修改,但是外部可通過extern CGFloat a;引用該變量,若無const,則通過extern引用a后也可修改。全局變量若只想被該文件所持有,不希望被外界引用,則用static修飾,也就是static const CGFloat a = 10.f;和 static CGFloat const a = 10.f;是一樣的,注意只有全局變量用static修飾時,才只被該文件所持有,外界不可引用。
const CGFloat XMGRed = 0.4;定義一個常量,若是全局變量,則可被外界引用,但不能修改
3:定義不可變字符串時:用 static NSString * const name = @"JACK";則指針name不可變,外界不可以給該變量賦值。其中const修飾可變與不可變,就看const右邊修飾的是什么 例如:NSString * const name = @"JACK",則代表指針name不可變,*name可變,若NSString const * name = @"JACK",則 *name不可變,指針name可變
4:UIKIT_EXTERN:其實就是extern,最好加上const,來告訴外界這個引用變量不可改變。
UIKIT_EXTERN const CGFloat XMGRed;
5:宏定義 與 static const 修飾的全局常量的區別:一般項目中盡量避免使用大量的宏定義,因為每一個宏定義都會在內存中臨時開辟一份內存空間,而static const 修飾的常量 ,則只會開啟一份內存空間,其使用效果和宏定義相同,建議以后項目開發中定義常量時,多用 static const 來代替宏定義