Objective C 2.0 为我们提供了property。它大大简化了我们创建数据成员读写函数的过程,更为关键的是它提供了一种更为简洁,易于理解的方式来访问数据成员。 我们先来看一下在Objective C 1.x下我们声明Book类的头文件:
在Objective C 2.0下,我们可以通过声明与数据成员同名的property来省去读写函数的声明。代码如下所示:
我们为每一个数据成员声明了一个property。即使Book类中没有summary这个数据成员,我们同样可以声明一个名为summary的property。声明property的语法为: @property (参数) 类型 名字; 这里的参数主要分为三类:读写属性(readwrite/readonly),setter语意(assign/retain/copy)以及atomicity(nonatomic)。 assign/retain/copy决定了以何种方式对数据成员赋予新值。我们在声明summary propery时使用了readonly,说明客户端只能对该property进行读取。atomicity的默认值是atomic,读取函数为原子操作。 下面我们来看一下在Objective C 1.x 下implementation文件:
在objective c 2.0下,由于我们声明了property,implementation文件可以更改如下:
可以看到数据成员title和numofpages的读写函数已经不复存在,取而代之的是两行@synthesize,它让编译器在我们未提供读写函数时自动生成读写函数。 定义了property,客户端可以使用book.title来取代[book title],这种语法比从前更加直观简洁。 实现文件中的16-17行代码可修改如下:
注意,许多人很容易忘记上面两行代码中的self,在这种情况下机器生成的读写函数并不会被调用,取而代之的是直接指针赋值,从而会引起内存泄露。 客户端代码如下所示:
|
07-22
07-22
07-22
07-22