#define是定义宏的指令,程序在预处理阶段将宏展开在使用的位置替换,程序在运行的时候系统不会分配内存,在编译的时候也不会检测数据类型,所以有出错的风险,在使用#define定义宏的时候要考虑边缘效应,如定义一个返回两个数的最小值宏的时候要考虑传入值可能情况,可参考系统的MIN定义
const定义的常量在程序运行时存放在常量表中,系统会为const定义的常量分配内存,在编译的时候也会进行类型检查,所以使用const在一定程度上提高程序的安全性和可靠性。
这里在定义变量的时候建议选择使用const,尽量少使用#define宏定义,const定义的是不可修改的,在使用const的时候需要注意,基本数据类型定义的时候const NSInteger age和NSInteger const age是一样的,age都是不可修改如何自定义NSString就不一样,如:
const NSString * name = @"xiao ming";
p name 打印指针:(__NSCFConstantString *) $0 = 0x000000010e65b480 @"xiao ming"
然后赋值:name = @"xiao hua";
p name 打印指针:(__NSCFConstantString *) $1 = 0x000000010e65b4a0 @"xiao hua"
发现指针变了,所以const NSString * name修饰的是值不能修改,而name是指针,需要注意,应该NSString *const name这样定义,const修饰指针,那么指针name就不可修改。