static,const,extern,以及全局常量


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 來代替宏定義

 
       


免責聲明!

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



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