如果有不对的地方请多多指正:
1.宏在编译开始之前就会被替换掉,而const知识变量进行修饰;
2.宏可以定义一些函数方法,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”;