但是我们再看看局部变量i被关键字static修饰后的情况:

点击事件
输出日志如下:

输出日志
上面日志中可以看到i的值一直在自增。什么,它不是每次进去都被初始化赋值为0了么,怎么能累加呢。这就是关键字static修饰的局部变量的作用,让局部变量永远只初始化一次,一份内存,生命周期已经跟全局变量类似了,只是作用域不变。
(2)修饰全局变量
使全局变量的作用域仅限于当前文件内部,即当前文件内部才能访问该全局变量。
iOS中在一个文件声明的全局变量,工程的其他文件也是能访问的,但是我又不想让其他文件访问,这时就可以用static修饰它了,比较典型的是使用GCD一次性函数创建的单例,全局变量基本上都会用static修饰。
下面是一个GCD一次函数创建的单例

单例
(3)修饰函数
static修饰函数时,被修饰的函数被称为静态函数,使得外部文件无法访问这个函数,仅本文件可以访问。这个在oc语言开发中几乎很少用,c语言倒是能看到一些影子,所以不详细探讨。
3、extern
这个单词翻译过来是“外面的、外部的”。顾名思义,它的作用是声明外部全局变量。这里需要特别注意extern只能声明,不能用于实现,而且定义和分配内存都在原来类中。

定义

声明

输出日志
4、UIKIT_EXTERN
如果多个.m文件需要用到myURL,可以在每一个.m文件都像下面这样初始化吗?
NSString * const myURL = @http://www.easck.com/pre>
肯定不行,编译时,会报重复定义.比如在pch文件中写上面这行代码,就相当于为每一个.m文件都写这行代码










