美文网首页
extern和static

extern和static

作者: MichalWilson | 来源:发表于2017-08-01 15:43 被阅读6次

    对于extern来说是这样的是从一个类扩展到另一个类中的,例如在ViewController中声明一个变量NSString * meString,然后赋值 meString = @"100", 然后在另外一个类NextViewController中用extern修饰一个变量extern NSString *meString; 

    meString和extern的声明在这两个地方都可以

    @implementation ViewController

    extern NSString *meString

    NSString * meString;和

    NSString * meString;

    extern NSString *meString

    @interface ViewController ()

    然后在NextViewController中输出一下meString,当然你也可以对meString重新进行赋值,就是说meString虽然定义在ViewController中但好像是公共的,也称为全局变量吧

    输出

    而对于static声明的变量,只是本类的内部的变量,static声明的地方和extern一样,

    1.修饰局部变量,保证局部变量永远只初始化一次,在程序的运行过程中永远只有一份内存,  生命周期类似全局变量了,但是作用域不变.

    2.修饰全局变量

    使全局变量的作用域仅限于当前文件内部,即当前文件内部才能访问该全局变量。

    iOS中在一个文件声明的全局变量,工程的其他文件也是能访问的,但是我又不想让其他文件访问,这时就可以用static修饰它了,比较典型的是使用GCD一次性函数创建的单例,全局变量基本上都会用static修饰.

    下面是一个GCD一次函数创建的单利

    @implementation LoginTool

    //static修饰全局变量,让外界文件无法访问

    static LoginTool *_sharedManager = nil;

    + (LoginTool *)sharedManager {

    static dispatch_once_t oncePredicate;

    dispatch_once(&oncePredicate, ^{

    _sharedManager = [[self alloc] init];

    });

    return _sharedManager;

    }

    3.修饰函数

    static修饰函数时,被修饰的函数被称为静态函数,使得外部文件无法访问这个函数,仅本文件可以访问

    区别:

    (1)extern修饰的全局变量默认是有外部链接的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过external全局变量的声明,就可以使用全局变量。

    (2)static修饰的全局静态变量,作用域是声明此变量所在的文件。

    相关文章

      网友评论

          本文标题:extern和static

          本文链接:https://www.haomeiwen.com/subject/hrvjlxtx.html