理解 OC 中实例变量(Instance variables)和属性(property) 的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解 OC 中实例变量(Instance variables)和属性(property) 的区别相关的知识,希望对你有一定的参考价值。

参考技术A OC中的实例变量(Instance variables)正如其名,就是一个实例中的变量(也就是 Swift 中的属性),可以是公开的(pubilc),也可以是(private)的,其创建方式如下(注意,定义的时候放在 @interface 后的花括号里):

注意,实例变量创建后是没有 getter 和 setter 方法的,如果想要给实例变量赋值,需要用"->"符号:

OC中的属性(property)区别我们理解的Swift中的属性,创建OC属性的时候,其实就是系统自动的在内部创建一个私有的实例变量+ getter + setter 。比如创建一个 NSString 类型的属性 name ,那OC会在幕后创建一个实例变量 _name 、一个 getter 方法 - (NSString*)name 和一个 setter 方法 - (void)setName:(NSString *)newName ,具体如下:

等价于

@synthesize 的作用就是把 name 属性的实例变量命名为 _name 。

创建属性的时候,系统默认是在属性前面加上下划线_的名称作为属性的实例变量,如果想要改变属性实例变量的名称,则用 @synthesize ,比如上面的例子,我们将 name 属性的实例变量改为 personName :

系统给属性默认创建的 getter 和 setter 方法让读写属性变得很容易,比如可以用"." 符号读写属性了:

当然也可以用 getter 和 setter 方法

还有一些规范需要注意:

以上是关于理解 OC 中实例变量(Instance variables)和属性(property) 的区别的主要内容,如果未能解决你的问题,请参考以下文章

OC菜鸟:OC中实例变量可以定义为static么?

OC中私有方法和私有变量

OC第二课

OC学习笔记

[OC学习笔记]对象消息运行期

oc实例变量初始化方法