OC点语法和property/synthesize使用

本文主要讲解,在OC中,如何创建私有成员变量的get/set方法,使用点语法访问,以及使用property创建getter/setter。

环境信息:

Mac OS X 10.9

xcode 5.1.1

点语法:

在OC中,实例化类了以后,可以用obj.var的方式来为成员变量进行赋值和读取。如:

类成员变量的定义和函数声明
类成员变量的定义和函数声明
在main中使用点语法来调用get/set方法
在main中使用点语法来调用get/set方法

所以,这也使得在变量的get/set方法中不能使用self.age来进行成员变量的访问。这样访问的效果如下:

在get/set方法中使用self,将会进入死循环
在get/set方法中使用self,将会进入死循环

 

@property:

如果私有成员变量有外部访问需求,那么就需要创建get/set方法。在成员变量很多的情况下,手写get/set肯定不现实,效率太低,而且没意义。所以OC提供了@property(在xcode 4.4以前还需要使用@synthesize来合成)来为成员变量创建get/set方法。

首先在.h文件中定义成员变量,然后写入@property

在.h文件中,使用property声明get/set方法
在.h文件中,使用property声明get/set方法

在main函数中,可直接使用点语法来访问成员变量(其实是调用的get/set函数来访问)

使用点语法访问get/set
使用点语法访问get/set

 

其他注意事项:

  1. 在OC中,如果没有说明变量权限,它将是@protected的。如果需要特别说明权限,写法如下:
定义变量的访问权限
定义变量的访问权限
  1. 在定义ivar(成员变量)时,一般命名为 int age或int age(不同的命名规范)。

  2. 在使用@property时,不用因为变量名为age而定义为@property int _age,而应该直接使用@property int age,系统会自动添加

  3. 在使用@synthesize实现get/set方法时(Xcode4.4以下),@synthesize会去找同名的成员变量,如果没找到,会自动添加不存在的变量,权限为@private。所以也可以不写成员变量,直接使用@property来创建。

  4. 在Xcode4.4以上的版本中,直接使用@property int age也可以自动创建变量,权限为@private,而不用在.m文件中使用@synthesize。

发表评论

电子邮件地址不会被公开。