美文网首页
static、const和extern

static、const和extern

作者: Zorin | 来源:发表于2020-07-14 18:12 被阅读0次

    一、 static 内部全局

    作用域:

    • 若在方法外:作用域为整个类,以及该文件中这个类下方的类中。
    #import "MyObject.h"
    
    @interface MyObject()
    @end
    @implementation MyObject
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            NSLog(@"%@",stri); /// 会报错,不能访问
        }
        return self;
    }
    @end
    
    static NSString * stri = @"hello";
    @interface MyObject1:NSObject
    @end
    @implementation MyObject1
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            NSLog(@"%@",stri); ///  正常,能访问到
        }
        return self;
    }
    @end
    
    @interface MyObject2:NSObject
    @end
    @implementation MyObject2
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            NSLog(@"%@",stri); /// 正常,能访问到
        }
        return self;
    }
    @end
    
    • 若在方法内:作用域为这个方法。
    #import "MyObject.h"
    
    @interface MyObject()
    @end
    @implementation MyObject
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            NSLog(@"%@",stri);/// 会报错,不能访问
        }
        return self;
    }
    @end
    
    @interface MyObject1:NSObject
    @end
    @implementation MyObject1
    
    - (instancetype)init
    {
        static NSString * stri = @"hello";
        self = [super init];
        if (self) {
            NSLog(@"%@",stri);/// 正常,能访问到
        }
        return self;
    }
    - (void)test {
        NSLog(@"%@",stri);/// 会报错,不能访问
    }
    @end
    
    @interface MyObject2:NSObject
    @end
    @implementation MyObject2
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            NSLog(@"%@",stri);/// 会报错,不能访问
        }
        return self;
    }
    @end
    

    二、 extern 把某文件中的内部变量作用域,扩大至当前所包含作用域

    • 一个文件中的全局变量是不能直接被其他文件访问的,如果想要访问某个文件的全局变量,可以通过extern var 来进行实现

    比如有个类为MyObject1 里面定义了一个 name 的变量;

    @implementation MyObject1
    NSString * name = @"peng";
    - (instancetype)init
    {
       self = [super init];
       if (self) {
       }
       return self;
    }
    - (void)test {
    }
    @end
    

    现在我们想在 MyObject 里面进行访问 MyObject1 中的 name 变量,此时是访问不到的;
    但可以通过extern 进行实现访问:

    extern NSString * name;
    @interface MyObject()
    @end
    @implementation MyObject
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            NSLog(@"%@",name);
        }
        return self;
    }
    @end
    

    控制台此时就能通过MyObject打印出 MyObject1 中的name : peng;

    也可以把 extern NSString * name;写在MyObject1的.h文件中

    三、 const 常量

    • 内存地址唯一、不可修改
    • 需在声明时初始化

    相关文章

      网友评论

          本文标题:static、const和extern

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