美文网首页Cc
const、static和extern的正确使用方式

const、static和extern的正确使用方式

作者: 岩大大 | 来源:发表于2016-11-24 17:03 被阅读25次

    我们在看一些大牛的第三方时,里面会出现很多const、static和extern,尤其是const和static,const和extern的结合使用,直接令很多小伙伴懵逼了,今天就详细讲解一下这三个关键字的正确使用方式。

    一、const

    const的作用和宏是很类似的,其实,苹果是不推荐我们使用宏的,它更喜欢我们使用const,于是乎,在swift中宏就被抛弃了,我们只能使用const。

    在这里简单聊一下const和宏的区别:

    1.编译时刻  宏:预编译 const:编译

    2.编译检查  宏没有编译检查,不会报编译错误,只是替换;const有编译检查,会报编译错误

    3.宏的好处  宏能定义一些函数,方法,但是const不可以

    4.宏的坏处  大量使用宏,会导致预编译时间过长。

    const有两个作用:

    1.修饰右边的基本变量和指针变量;

    2.被const修饰的变量只读,也就是只能获取,不能修改。

    const的使用场景:

    1.修饰全局变量  ==>全局只读变量  ==>  代替宏

    2.修饰方法中的参数

    代码如下:

    NSString * const gender = @"gender";

    [[NSUserDefaults standardUserDefaults] objectForKey:gender];


    二、static

    static有两个作用:

    1.修饰局部变量:被static修饰的局部变量,可以延长生命周期,生命周期跟整个应用程序一致;被static修饰的局部变量,只会分配一次内存。

    代码如下:

    - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {

    static int i = 0;

    i++;

    NSLog(@"%d", i);

    }

    2.修饰全局变量:被static修饰的全局变量,作用域会修改,生命周期不会改,只能在当前文件下使用。

    代码如下:

    static int m = 0;

    三、extern

    extern作用:声明外部全局变量。

    extern工作原理:先会去当前文件下查找有没有对应全局变量,如果没有,才会去其他文件查找。

    四、static和const的结合使用

    static,const结合使用的作用:声明一个只读的全局静态变量。

    开发使用场景:在一个文件中经常使用的字符串常量,可以使用static与const组合。

    代码如下:

    static NSString * const name = @"name";

    [[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:name];


    五、extern和const的结合使用

    使用场景:在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。

    开发时有个规定,为了避免重复报错,全局变量不能定义在自己的类中,我们需要自己创建一个全局文件管理全局东西。

    创建一个全局类GlobelConst。

    代码如下:

    #import<Foundation/Foundation.h>

    extern NSString * const discover_name;

    extern NSString * const home_name;

    #import "GlobelConst.h"

    //定义整个项目中的全局变量

    /**********  发现模块  **********/

    NSString * const discover_name = @"name";

    /**********  首页模块  **********/

    NSString * const home_name = @"name";

    [[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:discover_name];

    [[NSUserDefaults standardUserDefaults] objectForKey:discover_name];

    相关文章

      网友评论

        本文标题:const、static和extern的正确使用方式

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