如果有不對(duì)的地方請(qǐng)多多指正:
1.宏在編譯開始之前就會(huì)被替換掉,而const知識(shí)變量進(jìn)行修飾;
2.宏可以定義一些函數(shù)方法,const不能;
3.宏在編譯時(shí)只替換不做檢查不報(bào)錯(cuò),也就是說有重復(fù)定義的問題,而const會(huì)編譯檢查,會(huì)報(bào)錯(cuò);
4.隨著項(xiàng)目組建增大,過多的宏定義會(huì)影響項(xiàng)目的編譯速度,盡量多使用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”;