iOS 中const、static、extern关键字的理解

const

const的意思是常量,用const修饰的基本变量或者指针变量是只读的,不可修改的。

NSString *const userName = @"hjj";

如果后面有userName = @"zr";这样的错误的。

int  const  *p   //  *p只读 ;p变量
int  * const  p  // *p变量 ; p只读
const  int   * const p //p和*p都只读
int  const  * const  p   //p和*p都只读

const 和宏定义#define的区别

* "const简介":之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量。
* "执行时刻":宏是预编译(编译之前处理),const是编译阶段。
* "编译检查":宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。
* "宏的好处":宏能定义一些函数,方法。 const不能。

* "宏的坏处":使用大量宏,容易造成编译时间久,每次都需要重新替换。

static

static 静态变量

修饰局部变量:

    1.可以延长局部变量的声明周期,程序结束才会销毁。

2.局部变量只会生成一份内存,而且只会初始化一次。

3.改变局部变量作用域。

#pramark --事例1

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    int i = 0;
    i++;//目的是每点击一次就i自加
    NSLog(@"%d",i);
}

但是如果这样的话是不会自加的,因为每次点击都会创建一个局部变量

#pramark -- 事例2

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    static int i = 0;
    i++;//目的是每点击一次就i自加
    NSLog(@"%d",i);
}

事例2只初始化一次i,而且是同一份内存,所以i是可以自加的。


修饰全局变量:

只能在本文件中访问


extern是外界可以访问

.h 文件声明

extern NSString * const mk;//用extern修饰的变量是不能在.h赋值的,必须在.m实现,而且是一定要实现,不然的话会编译不成功。

.m 文件实现

NSString *const mk = @"mk";

这样外部类就可以访问mk这个变量了,类似于在.h的属性,外界可以访问属性。

猜你喜欢

转载自blog.csdn.net/jjjit/article/details/79841331