第八篇:编译器特性:关键字property与synthesize用法

来源:互联网 发布:快手未知网络连接错误 编辑:程序博客网 时间:2024/06/05 03:02

1.property关键字

》property 是一个编译器特性。

(1)在:xcode4.4版本以前

》用法:@property  指定成员变量类型  指定去掉下划线的成员变量名 ;

》用于在类声明中自动生成指定的 成员变量 set / get 方法(赋值 / 取值)的声明。

@interface Iphone : NSObject
{
    int _cpu ;
}

//自动生成 - (void)setCpu:(int)cpu ; 和 - (int)cpu ; 两个方法的声明

@property int cpu;


@end


(2)xcode4.4版本以后property做了增强:

》帮助声明与实现:上述声明的同时,也会自动实现指定的 成员变量 set / get 方法(赋值 / 取值)。

》如果没有手动声明 成员变量,property 会在 .m 文件中自动帮助我们生成一个以"_"开头的成员变量(成员变量: _变量名 )。例如:@property int xxxx ; 则在 .m 文件中自动生成的成员变量:_xxxx。

注意点:#如果想让子类继承父类的成员变量,还是必须在声明中手动定义成员变量。#如果你自己同时实现了一个成员变量的set / get 方法时,那么编译器不会在 .m 文件中自动成该成员变量,必须自己定义该成员变量。


2.synthesize关键字(实现):

》编译器特性。

(1) 明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:

》用法:@synthesize 变量名 = 成员变量 ;

》用于在类的实现中自动生成给  指定的 成员变量 set / get 方法(赋值 / 取值)的实现。

@implementation Iphone

/*

会实现: 

- (void) setCpu:(int)cpu   // - (void)set变量名大写:(int)变量名

{

    _cpu = cpu ;

}

- (int) cpu  // - (int)变量名

{

    return _cpu ;

}

*/

@synthesize cpu = _cpu ;


@end


(2) 没有明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:

》用法:@synthesize 变量名  ;

》说明:这样会自动赋值给和 变量 同名的成员变量。等价:@synthesize 变量名 =  变量名;

》如果该类中有一个成员变量cpu,那么当这样写时:

@implementation Iphone

/*

会实现: 

- (void) setCpu:(int)cpu

{

    self->cpu = cpu ;

}

- (int) cpu

{

    return self->cpu ;

}

*/

@synthesize cpu ;


@end



3.重写set / get 方法:

》当想控制外界传入的一些数据的合理性安全性的时候,我们就需要手动实现set 方法。

》再次强调:当我们手动同时实了一个成员变量的set / get 方法的时候,property 就不会自动给我们生成成员变量。

0 0