static 、 const 和 extern 是在写 iOS 应用中常用的几个关键词。本篇文章将从以下几个方面介绍。
static
- 被 static 修饰的变量属于静态变量储存在 静态数据区 ,该区域中的变量在编译时就被分配内存,并且在 app 运行期间一直存在内存当中,直到 app 停止运行。所以被 static 修饰的变量在内存中只存有一份,并且在整个 app 运行期只被初始化一次
- 用于对变量作用域的限制,限制变量只可在本文件中使用,但是不限制变量的读写(即可读写)。
const
- 被 const 修饰右边的变量为常量,即不可被修改(只读)。
const NSInteger a = 10; // a 不可被修改
NSInteger const a = 10; // 与上面效果一样
NSString const *str = @"hi"; // const 修饰的变量是 *str 所以可以修改 str 所指向的地址,不能修改 *str 具体的内容
NSString * const str = @"hi"; // const 修饰的变量是 str 所以可以修改 *str 具体的内容,不能修改 str 所指向的地址
extern
static 使得变量只对某个特定文件具有可见性,然而使用 extern 可以使得对所有文件可见
组合使用
申明全局常量
oc 中申明全局常量可以
//.h 文件
extern NSString * const kVAR;
//.m 文件
NSString * const kVAR = @"kVAR";
当然也可是使用宏来定义全局常量,但是建议用这种方法主要一下几点原因:
- 使用宏的话无法知道常量的类型
- 在调试的时候,宏使用不方便因为宏只是进行简单的替换。
静态常量
static 和 const可以使用 static 和 const 定义只在局部作用的静态常量:比如 TableViewCell 的高度等
static const CGFloat kCellHeight = 12.;