define
- 项目常用字符串及方法代码宏定义(以项目前缀开头)
#define FYAppKey @"appKey"
#define FYUserDefaults [NSUserDefaults standardUserDefaults]
const
const:意为常量,当有字符串常量的时候,苹果推荐我们使用const,使其成为全局只读变量,如下:
NSString * const FYAppKey = @"appKey";
const 和 define的部分区别
define:
预编译、不检查错误、可以定义代码片段,宏过多会导致编译时间过长
const:
编译时、检查错误、不可以定义代码片段,const在谁前面就是修饰谁
备注:const修饰的是其后的变量,被其修饰的变量变成只读
static
static int i = 0; // example
- 修饰局部变量时,程序一运行,就会给static修饰的变量分配内存,并且无论怎么调用、修改,都只会分配一次,延长其生命周期会伴随整个项目周期存活
- 修饰全局变量时,作用域会修改,只能在当前文件下可用,比如某个 .m 文件(如果想要使用全局变量,此时可以使用extern 声明一下,如下)
extern
extern int i ; // example
- 声明外部的局部变量,只能用于声明,不能用来定义变量
- 工作原理,会先在当前文件下寻找有没有该变量,如果没有就会在外部文件中寻找(让我想起了#import)
static和const一起使用
static NSString * const name = @"fy"; // 只能在该文件下使用的全局变量
extern和const一起使用如果项目中使用到了整个项目都需要使用的全局变量建议这样做
/*
为了方便开发,一般这种变量不能定义在某一模块中,
在Global.m中定义一个不允许修改的全局变量
*/
NSString * const FYAppKey = @"appKey";
/*
在Global.h中声明这个全局变量
*/
extern NSString * const FYAppKey;
使用的时候直接导入Global.h即可