美文网首页
iOS开发 关于 全局变量和静态变量

iOS开发 关于 全局变量和静态变量

作者: 我是卖报的小行家 | 来源:发表于2022-05-24 14:25 被阅读0次

    项目中的这些关键字 static extern const define typedef等等,我们在开发过程中也经常会遇到。

    static 静态变量

    当我们希望⼀个变量的作⽤域不仅仅是作⽤域某个类的某个对象,⽽是作⽤域整个类的时候,这时候就可以使⽤静态变量

    static 修饰的变量,是一个私有的全局变量。C或者Java中static关键字修饰的变量,可以使用类名直接拿到这个变量对象,在其他类中可以进行修改。但是在OC中static修饰的变量是不能通过类名直接访问的,它只作用于它声明所在的.m文件中。static修饰的变量必须放在@implementation外面或方法中,它只在程序启动初始化一次。

    const 常量

    const修饰的变量是不可变的,如果需要定义一个时间间隔的静态常量,就可以使用const修饰。

    当我们定义一个对象类型常量的时候,要将const修饰符放到*指针指向符后面。

    static NSString *const LMJName = @"appkey";
    
    extern 全局变量

    extern修饰的变量,是一个全局变量。
    此时全局变量只能被初始化一次。extern定义的全局常量的用法和宏定义类似,但是还是有本质上的不同的。 extern定义的全局常量更不容易在程序中被无意窜改。

    define

    define本质上就是文本替换,它本身并不在编译过程中执行,而是在之前(预处理过程)就已经完成了。

    typedef 定义类型

    它是语言编译过程中的一部分,我们在iOS开发过程中经常将typedef和枚举enum一起使用

    #define和typedef区别

    两者的区别:宏定义只是简单的字符串替换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装新,所以新命名的标识符具有定义变量的功能

    看下面的代码以及讲解,

    typedef (int *) pINT1;
    #define pINT2 int*;
    使用pINT1、pINT2来定义变量
    pINT1 a,b;--等价于-- int *a;int *b;表示定义了两个指向整型变量的指针a和b
    pINT2 a,b;--等价于-- int  *a,b;表示定义了一个指针变量a,一个整型变量b
    
    iOS项目中设置全局常量
    新建一个项目

    .h里面

    extern NSString *const sLogTags;
    extern NSString *const APPFlyerKey;
    extern NSString *const APPID;
    extern NSString *const ITUNES_URL;
    extern NSString *const FEEDBACK_EMAIL;
    

    .m里面

    NSString *const APPFlyerKey = @"x1111111111";
    NSString *const APPID = @"1111111111";
    NSString *const ITUNES_URL = @"http://itunes.apple.com/app/id1111111?mt=811";
    NSString *const BuglyID = @"11111111";
    

    相关文章

      网友评论

          本文标题:iOS开发 关于 全局变量和静态变量

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