如果有不對的地方請多多指正:
1.宏在編譯開始之前就會被替換掉,而const知識變量進行修飾;
2.宏可以定義一些函數(shù)方法孔祸,const不能隆敢;
3.宏在編譯時只替換不做檢查不報錯,也就是說有重復定義的問題融击,而const會編譯檢查筑公,會報錯;
4.隨著項目組建增大尊浪,過多的宏定義會影響項目的編譯速度,盡量多使用const封救,enum來代替宏定義#define
所以先考慮使用static方式聲明const來代替宏定義拇涤,const不能滿足的情況再考慮使用宏定義
例子:
static NSString *const CLASSNAME = @“Hello”; 代替? #define CLASSNAME @“Hello”誉结;
static NSString CGFloat CLASSWIDTH = 10.0鹅士;? ? ? ? 代替? #define CLASSWIDTH 10.0;
typedef NS_ENUM(NSInteger,TestEnum){
INT_CONST = 1;
}
代替 ? #define INT_CONST 1惩坑;
//全局變量
//地址不能改掉盅,值可以改,
const NSString *constString1 =? @“a const NSString *string ”;
NSString const *constString2 =? @“a const NSString const *string”;
//外部使用需要extern字段,比如在VC1.m文件中定義了全局變量以舒,在其他VC中使用需要:
extern NSString *constString1趾痘;NSLog(@“ constString1 : %@”,constString1)蔓钟;
//地址能改永票,值不可以改
NSString? *const? constString3? =? @“a const NSString *const string”
//局部變量
//作用域只在本文件中,在其他類使用需要引用定義的類
static const NSString *staticConstSring1? = @“a static const NSString *string”滥沫;
static NSString const *staticConstSring2? = @“a static NSString const*string”侣集;