OC点语法和property&synthesize使用

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


环境信息
Mac OS X 10.9
xcode 5.1.1

点语法:

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

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

 

@property:

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

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

在main函数中,可直接使用点语法来访问成员变量(其实是调用的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。