OC4 特性

OC2.0中引入了特性(property),它组合了新的预编译指令和新的属性访问器语法。

 

1、修改特性值

 

@property

这是一种新的编译器功能,表示声明一个新对象的属性。在@interface中使用。

@property float age;

其声明的属性是可以直接访问的。也可以用setAge: 来设置属性。

@property预编译指令的作用是自动声明属性的setter和getter。

 

@synthesize age;

在实现中使用@synthesize表示清除全部setter和getter方法。在@implementation中使用。

@synthesize也是一种新的编译器功能,表示“创建该属性的访问器”。当遇到代码@synthesize age;时,编译器将输出-setAge: 和age方法的已编译的代码。

 

1.3、点表达式

OC2.0的特性引入了一些新的语法特性,使我们可以更容易地访问对象的属性。

点表达式(.)。如果点表达式出现在等号(=)左边,该属性名称的setter方法将被调用。如果点表达式出现在对象变量右边,则该属性名称的getter方法将被调用。

点表达式只是调用访问器方法的一种快捷方式,这种用法并没有其它神秘之处。

 

 

2、特性扩展

2.1、名称的使用

有时希望实例变量有一个名称,而公开的属性具有另一个名称。

例如,如果希望使用其它名称(如appellation)调用Car类中的实例变量name,则只需要在Car.h文件中修改该实例变量的名称。

@interface Car:NSObject{

  NSString *appellation;

  NSMutableArray *tires;

  Engine *engine;

}

@property (copy) NSString *name;

@property (retain) Engine *engine;

 //@property中可以设置变量的内存管理(retain、assign和copy)

然后修改@synthesize指令:

@synthesize name =appellation;

编译器仍将创建 setName: 和name方法,但在其实现中却使用实例变量appellation。

 

2.2 只读特性

可以使某个对象具有只读属性。该属性可能是一个即时计算的值,也可能是其它对象只能读却不能修改的值。可以使用@property预编译指令的更多属性编写处理这些情况的代码。

默认情况下,特性是可修改的,即可读取可写入。可以使用特性的readwrite属性(默认情况)。

使用只读属性的一个示例如下:

@interface Me: NSObject {

  float showSize;

  NSString *licenseNumber;

}

@property (readonly) float shoeSize;

@property (readonly) NSString *licenseNumber;

@end

当@property是只读特性时,编译器将为该属性生成一个getter方法而不生成setter方法。Me类的使用者可以调用shoeSize和licenseNumber。但不能调用setShoeSize:和setLicenseNumber:。

 

3、

特性不支持那些需要接受额外参数的方法。如NSMutableArray。

 

posted @ 2020-06-05 16:31  吉吉boy  阅读(213)  评论(0编辑  收藏  举报