美文网首页selector
iOS全局变量、静态变量、静态常量分析

iOS全局变量、静态变量、静态常量分析

作者: 梦璃记忆 | 来源:发表于2018-09-10 09:58 被阅读46次

    一、全局变量

    • 作用域为自身源文件
      注意:不可以在其他的.m文件中声明同样名称的全局变量,否则会报错
    #import "TestView.h"
    
    //全局变量(只能在当前源文件中使用)
    NSString *cellId;
    
    @implementation TestView
    
    - (void)funcTest {
            cellId = @"cellId";
    }
    
    @end
    
    • 作用域为全部源文件 (即可以在一个.m文件使用另一个.m文件中的全局变量, 需要用到extern关键字,注意:extern是不允许直接初始化的!在.h文件中定义,在.m文件中初始化)
    #import <UIKit/UIKit.h>
    
    //全局变量 (只能初始化一次(即:NSString * textnum = @"textnum";)若重复初始化会报错)
    extern NSString * testNum;
    
    @interface TestView : UIView
    @end
    
    #import "TestView.h"
    
    NSString * testNum = @"初始化全局变量";
    
    @implementation TestView
    @end
    
    #import "ViewController.h"
    #import "TestView.h"
    
    //若在此处重复初始化testNum全局变量,会报错,因为当前全局变量已经初始化了,在这里不能再初始化
    //NSString * testNum = @"重复初始化全局变量";
    
    @implementation ViewController
    
    //使用全局变量
    - (void)viewDidLoad {
        [super viewDidLoad];
        testNum = @"使用extern全局变量";
    }
    @end
    

    二、静态变量

    • 静态变量需要用到static关键字,static在程序运行中只初始化一次,也就是说被static标记的变量的内存地址是唯一确定的,不会改变
    • 可以在函数外部或者内部声明(即可以修饰原全局变量或者局部变量)
    • 存储在全局(静态)存储区,程序结束后释放
    #import "TestView.h"
    
    //静态(全局)变量
    static int globalNum;
    
    @implementation TestView
    
    - (void)funcTest {
        //静态(局部)变量
        static int localNum;
    }
    @end
    

    三、静态常量

    • const修饰的变量是不可变的,如果需要定义一个静态常量,就可以使用const修饰。
    1. 以下方法定义的是可以修改的,
    //const修饰的是*a,而*a是指针a所指向的内存中保存的值,这时*a不可修改,而a是可以修改的,即a这个指针不指向原来的内存中的值了
    static const NSString *a = @"a";
    static NSString const *a = @"a";
    
    1. 静态常量的定义,这才是正确的打开方式
    //const修饰的是b这个指针变量,是不可修改的,当然这个指针所指向的值是不变的
    static NSString * const b = @"b";
    

    相关文章

      网友评论

        本文标题:iOS全局变量、静态变量、静态常量分析

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