美文网首页
iOS中的一些修饰符、关键字

iOS中的一些修饰符、关键字

作者: Hyukooooh | 来源:发表于2018-03-21 15:08 被阅读8次

    Static

    修饰的局部变量:让局部变量永远只初始化一次,一份内存,生命周期已经跟全局变量类似了,只是作用域不变。
    修饰全局变量:使全局变量的作用域仅限于当前文件内部,即当前文件内部才能访问该全局变量。iOS中在一个文件声明的全局变量,工程的其他文件也是能访问的,但是我又不想让其他文件访问,这时就可以用static修饰它了,比较典型的是使用GCD一次性函数创建的单例,全局变量基本上都会用static修饰。
    修饰函数:static修饰函数时,被修饰的函数被称为静态函数,使得外部文件无法访问这个函数,仅本文件可以访问。这个在oc语言开发中几乎很少用,c语言倒是能看到一些影子,所以不详细探讨。

    extern

    这个单词翻译过来是“外面的、外部的”。顾名思义,它的作用是声明外部全局变量。这里需要特别注意extern只能声明,不能用于实现。在开发中,我们通常会单独抽一个类来管理一些全局的变量或常量,下面来看看逼格比较高的一种做法:我们可以在.h文件中extern声明一些全局的常量
    //声明一些全局常量extern NSString * const name;
    extern NSInteger const count;
    然后在.m文件中去实现
    //实现NSString * const name = 王五;NSInteger const count = 3;这样,只要导入头文件,就可以全局的使用定义的变量或常量。

    const

    1.const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)
    2.被const修饰的变量是只读的。(变量变成常量)
    3.基本使用

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 定义变量
        int a = 1;
    
        // 允许修改值
        a = 20;
    
        // const两种用法
        // const:修饰基本变量p
        // 这两种写法是一样的,const只修饰右边的基本变量b
        const int b = 20; // b:只读变量
        int const b = 20; // b:只读变量
    
        // 不允许修改值
        b = 1;
    
        // const:修饰指针变量*p,带*的变量,就是指针变量.
        // 定义一个指向int类型的指针变量,指向a的地址
        int *p = &a;
    
        int c = 10;
    
        p = &c;
    
        // 允许修改p指向的地址,
        // 允许修改p访问内存空间的值
        *p = 20;
    
        // const修饰指针变量访问的内存空间,修饰的是右边*p1,
        // 两种方式一样
        const int *p1; // *p1:常量 p1:变量
        int const *p1; // *p1:常量 p1:变量
    
        // const修饰指针变量p1
        int * const p1; // *p1:变量 p1:常量
    
    
        // 第一个const修饰*p1 第二个const修饰 p1
        // 两种方式一样
        const int * const p1; // *p1:常量 p1:常量
    
        int const * const p1;  // *p1:常量 p1:常量
    }
    

    使用static const修饰变量和宏定义的比较

    相同点
    都不能再被修改
    一处修改,其它都改了
    不同点
    static const修饰变量只有一份内存
    宏定义,只是简单的替换,每次使用都需要创建一份内存
    结论
    使用static const修饰更加高效,在同一个文件内可以使用static const取代#define


    // static const修饰变量只有一份内存
    static const CGFloat ZMJRed = 0.4;

    // 宏定义,只是用0.4替换ZMJRed,每次使用都需要创建一份内存
    #define ZMJRed 0.4

    相关文章

      网友评论

          本文标题:iOS中的一些修饰符、关键字

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