您的位置:首页 > 其它

属性之特性 浅谈

2015-06-25 21:59 281 查看

特性( Property)

使用特性我们可以避免手工编写繁琐的 setter 和 getter 方法,避免因为这些方法来内存的问题,同 时,也可以节省编写代码的时间

@property 新的编译器指令,主要功能是为我们自动”生成”,setter 和 getter 方法的声明.(这里需要注意:我们是看不到这些代码的,它们是有编译器自动生成的)

@synthesize 与@ property 相对应的新的编译器功能.主要是为我们自动生成 setter 和 getter 方法的功能实现.(这里也要注意:我们也看不到相应代码)

在这里举一个例子,新建一个 QYTire 类,继承于 NSOhject

@interface QYTire : NSObject
{
float pressure;//胎压
float treadth;//轮胎花纹情况
}

- (void)setPressure:(float)pressure;
- (float)pressure;

- (void)setTreadth:(float)treadth;
- (float)treadth;

@end


使用@ property 后就变成如下结果

@interface QYTire : NSObject
{
float pressure;//胎压
float treadth;//轮胎花纹情况
}

@property float pressure;
@property float treadth;

@end


而@ synthesize 的用法也是如此,未使用之前,在对应的. m 文件中代码是这样:

@implementation QYTire

- (void)setPressure:(float)p
{
pressure = p;
}
- (float)pressure
{
return pressure;
}

- (void)setTreadth:(float)t
{
treadth = t;
}
- (float)treadth
{
return treadth;
}
@end


使用了@ synthesize 后可以是这样:

@implementation QYTire

@synthesize pressure;
@synthesize treated;
@end


而@ property 和@ synthesize 结合使用的结果就是 QYTire.h 文件

@interface QYTire : NSObject

@property float pressure;
@property float treadth;

@end


QYTire.m 文件内容如下

@implementation QYTire

@end


这是编译器的新机制,直接省略了@ synthesize, 由编译器自动生成 setter 和 getter 方法.

局限性

特性不能用于有参数的 setter 和 getter 方法,如:

- (void) setTire:(Tire*) tire atIndex:(int)index;
- (Tire*) tireAtIndex:(int)index;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  getter 方法 声明