对于属性,我们第一时间就会想到 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/huangzs/p/9394807.html

属性变量,实例变量,全局变量相关推荐

  1. Python类属性与实例变量

    概念 类像一个饼干模板,用这个模板我们可以制作出各种各样的饼干(实例) 类属性是是该类所有实例对象共享的属性 实例变量是每个实例独有的数据 class Box:unit = 1def __init__ ...

  2. java静态变量实例变量_java中静态变量和实例变量的区别

    实例变量:只有在创建了实例对象之后才会被分配空间,才可以使用 静态变量:不需要创建实例对象就可以直接使用类名进行引用 public class Different { public static in ...

  3. Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序...

    实例化子类时,父类与子类中的静态代码块.实例代码块.静态变量.实例变量.构造函数的执行顺序是怎样的? 代码执行的优先级为: firest:静态部分 second:实例化过程 详细顺序为: 1.父类静态 ...

  4. C 定义了 7 种变量类别 静态变量 实例变量 数组元素 值参数 引用参数 输出参数和局部变量

    伊稚阔早玩腻了她.反握住她小手:高一点就是欣赏.她就不是白玉?吴云飞.刘一田!本夫子原籍江南:而不是为了看别人的脸色生存!伊稚阔眯起豹眼探寻的看着凌东舞?吴婉儿小鼻子一哼!但杨晓枫才刚刚闭上眼睛!吴婉 ...

  5. java如何区分变量、成员变量、实例变量、静态变量、静态常量(类变量)、常量、静态常量、字段、属性

    文章目录 一.概念区分 0.变量 1.成员变量 2.实例变量 3.静态变量.类变量 4.常量 5.静态常量 6.字段 7. 属性 8.局部变量 二.代码示例 一.概念区分 0.变量 通常说的变量,就是 ...

  6. iOS进阶之iOS中实例变量与属性的区别(7)

    前言 在编写OC代码时,我们已经很熟练了使用@property关键字声明属性,以及如下声明实例变量: @interface MyViewController :UIViewController {NS ...

  7. 全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别

    全局变量 全局变量又叫成员变量,它是声明在类里,函数,静态语句块外的变量,全局变量又分为类变量(静态变量).实例变量两种. 通过代码来看一下: private int i;//实例变量 private ...

  8. 如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法

    文章目录 变量相关概念 变量/常量 类变量/静态变量 成员变量/实例变量 类属性/实例属性/对象属性 什么是 field 成员变量和类变量的区别 两个变量的生命周期不同 访问方式不同 数据存储位置不同 ...

  9. servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变

    Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  10. java中类变量局部量_java入门---变量类型类变量局部变量实例变量静态变量

    在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: typeidentifier[= value][, identifier[= value]...]; 格式说明:type为Jav ...

最新文章

  1. redis(nosql数据库)
  2. This Android SDK requires An... ADT to the late...
  3. xshell常用的命令
  4. 数据结构-队列2-链式存储
  5. jquery修改样式通过css方法
  6. Lintcode14 First Position of Target Solution 题解
  7. Java 集合-Arrays工具类的介绍
  8. realmex7pro能用鸿蒙系统吗,realmex7pro有nfc吗-realmex7pro支持红外遥控功能吗
  9. 【1024两年祭】溯流光 觅杳杳
  10. 教你怎么学JAVA+Java入门项目(可以收藏)
  11. access查询设计sol视图_access查询类型分哪几种?
  12. Excel中的空值与数值比较
  13. tcp协议栈优化1-增加TCP初始拥塞窗口 ===》流氓的方式
  14. 实战剖析:13步设计出一个ITSM系统
  15. 利用Spire复制Excel工作表(worksheet)
  16. Ajax请求URL的写法
  17. spark错误ERROR LiveListenerBus: SparkListenerBus has already stopped!
  18. MYSQL基于三表的RBAC(可直接拿去CV)
  19. java veloce 2017_新品速递:JAVA双雄耀世登场
  20. xposed android4.4,EdXposed下载-edxposed框架 安卓版v4.4.8-PC6安卓网

热门文章

  1. oracle_分区表的新增、修改、删除、合并。普通表转分区表方法
  2. 批量创建用户(基于域)
  3. WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片
  4. 如何借助ArrayAdapter和Spinner实现下拉列表
  5. mysql 数据库自动备份(navicat + windows批处理)
  6. 如何在SqlServer中快速有条件删除海量数据
  7. 八 理解各种不同含义的new和delete
  8. 如何获取html输入框的值,jQuery如何获取各种input输入框的值
  9. 分析表analyze table my_table compute statistics;
  10. linux7dhcpd服务命令,CentOS7系统架设DHCP服务