如eclipse一样,object-c自2.0以后提供了简单的成员变量的get、set方法。
操作如下:
在类接口本分使用@property指令定义属性,1,使用@property定义属性使无须放在类接口部分的花括号中,可以直接放在@interface和@end之间进行定义
2,这步是可选的,如果程序需要改变getter/setter方法对应的成员变量的变量名称,则可在该类的实现部分加上@synthesize指令。
@synthesize window=_window;这行代码用以告诉程序合成的property对应的成员变量为_window,而不是window。
实例:#import<Foundation/Foundation.h>
@interface User:NSObject
@property (nonatomic) NSString* name;
@property NSString* pass;
@property NSDate* birth;
@end
#import "User.h"
@implementation User
@synthesize name=_name;
@synthesize pass;
@synthesize biirth;
//实现自定义的setName方法
-(void)setName:(NSString*) name{
self->_name=[NSString stringWithFormat:@"+++@",name];
}
@end
附加:当使用@property定义property时,还可以在@property和类型之间用括号添加一些额外的指示符:如assign,atomic。nonautomic,copy
assign------该指示符指定对属性只是进行简单的赋值,不更改对赋值的值得引用计数。(引用计数是object-c中的内存回收钙奶,当一个对象的引用计数大于0是,表示该对象还不应该被回收,用于NSI那个人等基础类型,以及double,short和结构体等数据类型不存在内存回收的问题,所以使用assign即可)
。
atomic------制定合成的存取方法是否为原子操作,原子操作是指是否线程安全。如果使用atomic,当一个线程进入读取方法的方法体后,其他线程无法进入该存取方法,这样可以避免多线程操作影响数据的完整性,默认情况下是atomic,实际应用中一般是nonautomic.
copy-----这种情况下,当调用setter方法对成员变量赋值时,会将被赋值的对象赋值一个副本,再将该副本赋值给成员变量。
实例:
Book* book=[[Book alloc] init];
NSMutableString* str=[NSMutableString stringWithString:@"hello"];
[book setName:str];
//此时book的name属性值为“hello”
[str appendString:@world];
//此时再次输出name的属性值时则为helloworld。
给getter、setter方法设置别名
#import<Foundation/Foundation.h>
@interface Book:NSObject
@property(assign,nonatomic,getter=qwe,setter=qaz;) int price;
@end