项目中的这些关键字 static
extern
const
define
typedef
等等,我们在开发过程中也经常会遇到。
static 静态变量
当我们希望⼀个变量的作⽤域不仅仅是作⽤域某个类的某个对象,⽽是作⽤域整个类的时候,这时候就可以使⽤静态变量
static 修饰的变量,是一个私有的全局变量
。C或者Java中static关键字修饰的变量,可以使用类名直接拿到这个变量对象,在其他类中可以进行修改。但是在OC中static修饰的变量是不能通过类名直接访问的,它只作用于它声明所在的.m文件中。static修饰的变量必须放在@implementation外面或方法中,它只在程序启动初始化一次。
const 常量
const修饰的变量是不可变的,如果需要定义一个时间间隔的静态常量,就可以使用const修饰。
当我们定义一个对象类型常量的时候,要将const修饰符放到*指针指向符后面。
static NSString *const LMJName = @"appkey";
extern 全局变量
extern修饰的变量,是一个全局变量。
此时全局变量只能被初始化一次。extern定义的全局常量的用法和宏定义类似,但是还是有本质上的不同的。 extern定义的全局常量更不容易在程序中被无意窜改。
define 宏
define本质上就是文本替换,它本身并不在编译过程中执行,而是在之前(预处理过程)就已经完成了。
typedef 定义类型
它是语言编译过程中的一部分,我们在iOS开发过程中经常将typedef和枚举enum一起使用
#define和typedef区别
两者的区别:宏定义只是简单的字符串替换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装新,所以新命名的标识符具有定义变量的功能
看下面的代码以及讲解,
typedef (int *) pINT1;
#define pINT2 int*;
使用pINT1、pINT2来定义变量
pINT1 a,b;--等价于-- int *a;int *b;表示定义了两个指向整型变量的指针a和b
pINT2 a,b;--等价于-- int *a,b;表示定义了一个指针变量a,一个整型变量b
iOS项目中设置全局常量
新建一个项目
.h里面
extern NSString *const sLogTags;
extern NSString *const APPFlyerKey;
extern NSString *const APPID;
extern NSString *const ITUNES_URL;
extern NSString *const FEEDBACK_EMAIL;
.m里面
NSString *const APPFlyerKey = @"x1111111111";
NSString *const APPID = @"1111111111";
NSString *const ITUNES_URL = @"http://itunes.apple.com/app/id1111111?mt=811";
NSString *const BuglyID = @"11111111";
网友评论