zoukankan      html  css  js  c++  java
  • 属性变量,实例变量,全局变量

    对于属性,我们第一时间就会想到 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
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    redis 持久化RDB、AOF
    进程、线程、协程
    nginx 常用配置
    Redis详解(一)
    Nginx(一)
    docker compose
    练习1——排序
    8万行的insert数据,Ctrl+c、Ctrl+v后心态崩了(如何在Linux下对MySQL数据库执行sql文件)
    Ubuntu使用+Thinkphp5学习——20(html文件中代码注释掉,但是runtime/temp中的php文件仍然存在)
    Ubuntu使用+Thinkphp5学习——19(新增用户报错strip_tags() expects parameter 1 to be string, array given)
  • 原文地址:https://www.cnblogs.com/huangzs/p/9394807.html
Copyright © 2011-2022 走看看