书写固定的字符串有哪些方法
宏
#define HSCoder @"汉斯哈哈哈"
常量字符串
static const NSString *HSCoder = @"汉斯哈哈哈";
const NSString *HSCoder = @"汉斯哈哈哈";
NSString const *HSCoder = @"汉斯哈哈哈";
NSString *const HSCoder = @"汉斯哈哈哈";
const位置不同有哪些区别
结论:const右边的不能被修改
const NSString *HSCoder = @"汉斯哈哈哈";//1. "*HSCoder"不能被修改, "HSCoder"能被修改
NSString const *HSCoder = @"汉斯哈哈哈";//2. "*HSCoder"不能被修改, "HSCoder"能被修改
NSString * const HSCoder = @"汉斯哈哈哈";//3. "HSCoder"不能被修改,"*HSCoder"能被修改
从以上可以知道情况1和2相同,没有区别.
static静态区表示什么
- 全局常量:不管你定义在任何文件夹,外部都能访问
- 局部常量:用static修饰后,不能提供外界访问
如果一个局部常量在外部进行访问,编译时会提示找不到符号的错误
const NSString *HSCoder = @"汉斯哈哈哈";//全局常量字符串
static const NSString *HSCoder = @"汉斯哈哈哈";//局部常量字符串
UIKIT_EXTERN是干嘛的
UIKIT_EXTERN相当于extern定义,表示扩展的全局常量,凡是定义了UIKIT_EXTERN的,只要包含了UIKit这个库,就可以访问这个常量.所以Apple本身常用以下这种形式定义在头文件.
UIKIT_EXTERN NSString *const HSCoder;
代表的意思是
- 这是一个UIKit的扩展字符串,只要包含了UIKit就可以使用
- 这个NSString的指向的内容(*HSCoder)可以改变,但是指针本身指向的地址(HSCoder)不能变.
- 这是一个全局常量,可以外部访问
进行了这样的定义后,一般会在.m里实现真正的文本内容,由于条件2,在进行赋值的时候HSCoder = @”新内存”,HSCoder无法改变指向的内存地址,所以无法赋值.
NSString *const HSCoder = @"汉斯哈哈哈";