• 属性变量,实例变量,全局变量


    对于属性,我们第一时间就会想到 self.name,@property,如:

    @property(nonatomic,copy) NSString *name;
    

    这里的name 被我们称为属性变量,或是成员变量。
    对于这种:

    @interface Person() {
    NSString *_shortname;
    }
    

    我们称为实例变量。
    区别:成员变量 = 实例变量 + 存取方法(setter,getter)。
    比如:当我们使用self.name = @"name" 的时候实际上是使用了namesetter方法,对实例变量_name进行了赋值。

     -(void)setName:(NSString *)name {
     _name = name;
    }
    

    当我们读取self.name的值的时候,实际上是通过getter方法获取_name的值。

    -(NSString *)name {
    return _name;
    }
    

    注意:1.如果你需要同时重写namesettergetter方法的时候,你需要使用

    @synthesize name = _name;
    

    2.在init方法中不要使用self.来调用属性。self.这种方式会调用存取方法,需要一个已经完全初始化好的对象来进行操作,而在init方法中,存在着self没有完全初始化好的的情况,可能会出现一些莫名其妙的问题。
    局部变量就不再赘述,对于全局变量,首先要说明_name这种不叫全局变量!!!全局变量的定义一般是这个样子的:

    NSString * Phone = @"138xxxxxxxxxx";
    

    需要注意的一点是,当我们使用const声明全局变量之后,表示该值是不可修改的。

    NSString * const Phone = @"138xxxxxxxxxx";
    

    对于static来说,static 是限定该变量的作用范围只在定义该变量的编译单元中有效,一般都是在.m文件中使用static定义,表示只在当前类中可以使用。当然,如果是暴露在.h文件中,只要导入该类的头文件自然是可以使用Phone的。

    static NSString * const Phone = @"138xxxxxxxxxx";
    

    如果不加static 就表示该变量可以在其它类中使用,只需要在使用前在该类中使用extern 引用该变量即可。
    关于const位置的问题 参考 http://www.jianshu.com/p/f83335e036b5

    注意:如果在extern引用的时候没有添加const关键字,即便是在定义时声明该值不可变,该值仍然是可以被改变的。

    extern NSString *Phone;
    Phone = @"xxxxxxxxxxx138";
    NSLog(@"%@", Phone);
    
     
    const.png


    作者:墨笑白
    链接:https://www.jianshu.com/p/a5e5f487ef0e
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    1、SASS / SCSS 总结简介
    Chrome 中的 JavaScript 断点设置和调试技巧
    《Javascript 设计模式》-读书笔记
    CSS基线之道
    高性能 CSS3 动画
    《编写高质量代码》web前端开发修炼之道-读书笔记
    《Effective JavaScript》编写高质量的Javascript代码的68个有效方法-读书笔记
    Sea.js-模块化开发框架
    JSLine和JSHint代码质量检查工具和uglifyjs压缩JS的
    在Windows平台上安装Node.js及NPM模块管理
  • 原文地址:https://www.cnblogs.com/huangzs/p/9394807.html
Copyright © 2020-2023  润新知