iOS开发 关于 全局变量和静态变量

项目中的这些关键字 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";

你可能感兴趣的:(iOS开发 关于 全局变量和静态变量)