美文网首页
关于extern、static、const的使用

关于extern、static、const的使用

作者: 灰灰是只小贱狗 | 来源:发表于2018-04-18 12:52 被阅读4次

    extern:

    • 只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量
    • 先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。

    如果在A.m中定义一个变量如下:

    #import "A.h"
    NSString *PropertyTypeInt = @"i";
    NSString *PropertyTypeFloat = @"f";
    

    而在另外一个类实现B.m中需要使用PropertyTypeIntPropertyTypeFloat,只需在B.m中这样实现:

    #import "B.h"
    extern NSString* PropertyTypeInt;
    extern NSString* PropertyTypeFloat;
    

    这时你会发现打印PropertyTypeIntPropertyTypeFloat,是if

    static:

    1.两个.m文件中同样的全局变量:


    vc.m中定义
    person.m中定义 报错提示,出现相同变量名

    同一个工程中,两个不同 .m 文件中同样的全局变量不能同时存在

    2.静态全局变量 :


    在person.m中用static修饰agee 在ViewController中使用agee报错

    因为在Person中agee是一个静态全局变量,尽管在ViewController使用了关键字extern想使用它,但还是不行的,静态全局变量只能在本文件中使用,不允许其他文件的调用!

    const:

    1. const一般用来定义一个常量, 既然叫做常量, 即以后再也不能修改其值.
      2.const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)

    static与const联合使用

    • static与const作用:声明一个只读的静态变量;
    • 开发使用场景:在一个文件中经常使用的字符串常量,可以使用static与const组合
    // 声明一个静态的全局只读常量
    static const int a = 20;
    
    // staic和const联合的作用:声明一个静态的全局只读常量
    
    // 开发中经常拿到key修改值,因此用const修饰key,表示key只读,不允许修改。
    static  NSString * const key = @"name";
    
    // 如果 const修饰 *key1,表示*key1只读,key1还是能改变。
    
    static  NSString const *key1 = @"name";
    
    

    extern与const联合使用

    • 开发中使用场景:在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。
    • 原因:
      static与const组合:在每个文件都需要定义一份静态全局变量。
      extern与const组合:只需要定义一份全局变量,多个文件共享。
    • 全局常量正规写法:开发中便于管理所有的全局变量,通常搞一个GlobeConst文件,里面专门定义全局变量,统一管理,要不然项目文件多不好找。

    参考文章

    那些人追的干货

    相关文章

      网友评论

          本文标题:关于extern、static、const的使用

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