zoukankan      html  css  js  c++  java
  • iOS定义静态变量、静态常量、全局变量

    静态变量

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

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

    static int num;

    静态常量

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

    static const NSTimeInterval LMJTimeDuration = 0.5;

    如果试图修改TimeDuration编译器则会报错。

    如果我们定义一个字符串类型的静态常量就要注意了,这两种写法是一样的,而且是可以修改的

    static NSString const * LMJName = @"iOS开发者公会";
    static const NSString * LMJName = @"iOS开发者公会";

    这两种写法cons修饰的是* LMJName,*是指针指向符,也就是说此时指向内存地址是不可变的,而内存保存的内容时可变的。
    所以我们应该这样写:

    static NSString * const LMJName = @"iOS开发者公会";

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

    全局变量

    extern
    extern修饰的变量,是一个全局变量。

    extern NSString * LMJName = @"iOS开发者公会;

    extern修饰的变量也可以添加const进行修饰:

    extern NSString * const LMJName = @"iOS开发者公会;

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

    版权声明:出自MajorLMJ技术博客的原创作品 ,转载时必须注明出处及相应链接!

  • 相关阅读:
    【spring-boot】mybatis-generator 使用入门
    【spring-boot】mybatis 使用入门
    【spring-boot】logback+slf4j 日志组合
    【spring-boot】写一个简单的单元测试
    github执行clone操作时报错
    enable device: BAR 0 [mem 0x00000000-0x003fffff] not claimed
    Meson version is 0.44.1 but project requires >=0.45.
    tig
    Unknown command 'run'
    systemctl enable rc-local.service error
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/7084390.html
Copyright © 2011-2022 走看看