objective c数据封装

如果你在类的声明中包含了属性(property),如:

@interface XYZPerson : NSObject

@property NSString *firstName;

@property NSString *lastName;

@end

那么,编译器将自动为你创建实例变量(instance variable),即     //注:此处有待考证

_firstName 和 _lastName.   但如果用了@synthesize语句的除外,那个语句等于将实例变量和属性同名。

 

同时,通过 @synthesize语句,

@synthesize fistname;

@synthesize lastname;

编译器将创建两个属性方法(accessor method),其中set方法命名为set + 属性名头字母大写,即相当于创建了:

(void) setFirstName(NSString *str); 和

(void) setLastName(NSString *str);

另一个属性方法get则命名为和属性相同的名字,即相当于创建了

(NSString *)firstname(void);和

(NSString *)lastname(void).

于是,你可以通过诸如如下语句访问(access)或设置(set)对象的属性:

XYZPerson *someOne = [[XYZPerson alloc] init];

NSString  *myName = [someOne firstname];

[someOne setFirstName:@"Johnny"];

如果希望get方法不用以上的名字(即和属性同名的名字),可以在定义属性的时候特别说明,如:

@property  (getter = getFirstName) NSString * firstName;

 

可以用点号访问或设置属性,如:

NSString *myName = someOne.firstName;

someOne.firstName=@"Smith";

 

如果希望属性名和实例变两名(instance variable)不同名,则可以在@synthesize语句中特别标出,如:

@synthesize firstName = first;

这样,对应firstName属性的实例变量名将为first,而不是_firstName.

但如果仅仅是写成

@synthesize firstName

则属性名和实例变量名将相同。 

 

 

 

 

posted @ 2012-09-05 17:09  luoxs  阅读(417)  评论(0编辑  收藏  举报