define
属于预编译指令,在程序运行之前就已经编译好;额,定义变量,没有类型信息,
const
修饰的变量是不可变的,只是给出了内存地址,且只在程序运行时初始化开辟一块内存空间
const 只修饰右边部分 右边部分表示只读
int const *p; // *p:指针变量 //可以修改值,但不能修改地址 int a = 10; int b = 20; int const *p = &a; NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a); p = &b; NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a); // const修饰变量 int * const p; // p:常量 //只能修改p的地址 不能修改p 的值 int const *p = &a; NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a); *p = b; NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);
extern
extern用来修饰全局变量。extern用在变量声明中常常有这样一个作用
使用如:
.h 文件中声明
extern NSString * const kTTTStrikeOutAttributeName;
.m 文件中
NSString * const kTTTStrikeOutAttributeName = @"TTTStrikeOutAttribute";
FOUNDATION_EXPORT:
FOUNDATION_EXPORT double TTTAttributedLabelVersionNumber;
类似define,区别在于这种方法在检测字符串的值是否相等的时候更快.对于第一种你可以直接使用(stringInstance == MyFirstConstant)来比较,而define则使用的是这种.([stringInstance isEqualToString:MyFirstConstant])