属性声明:@property相当于setter/getter
属性实现:@synthesize,如果修改setter/getter方法,加这个
例如:@synthesize age = _age;给age重写
语义设置
1,assign如果属性是⾮对象类型(比如int,float等)属性的语义设置使用assign
2,retain如果属性是对象类型(⽐如NSStrng、NSArray等)属性的语义设置使用retain。
3,copy如果属性是对象类型并且想得到参数的copy,使用copy关键字(NSString类型都用copy)
三种语义下的getter/setter
1.//-------->assign下的getter和setter
//getter方法
- (NSInteger)age
{
return _age;
}
//setter方法
- (void)setAge:(NSInteger)age
{
_age = age;
}
2,//------->retain下的getter和setter
//除了遵循NSCopying协议和基本数据类型之外的类类型;
//getter方法
- (NSArray *)array
{
return [[_array retain] autorelease];
}
//setter方法
- (void)setArray:(NSArray *)array
{
if (_array != array)
{
[_array release];
_array = [array retain];
}
}
3,//-------->copy下的getter和setter
//遵循了NSCoping协议
//getter
-(NSString *)name
{
return [[_name retain] autorelease];
}
//setter
-(void)setName:(NSString *)name
{
if (_name != name)
{
[_name release];
_name = [name copy];
}
}
//语义设置管理getter,setter内部实现,
//assign:声明的属性是基本数据类型.
@property (nonatomic, assign)NSInteger age;
//retain
@property (nonatomic, retain)NSArray *array;
//copy
@property (nonatomic,copy)NSString *name;
属性的属性
(1)readonly,告诉编译器,只声明getter方法(无setter方法)。
例如:@property(readonly)NSString *name;
//等价于 - (NSString *)name;
(2)readwrite,告诉编译器,既声明setter又声明getter。
例如: @property(readwrite)NSString *name;
//等价于 - (NSString *)name;
- (void)setName:(NSString *)name
第二类:原子性控制
1.atomic。setter、getter方法在多线程访问下是绝对安全的,即 setter、getter内部做了多线程访问处理。原⼦性控制的默认设置是 atomic
2.nonatomic。setter、getter方法内部不会做多线程访问处理,仅仅是 普通的setter、getter⽅法
3. 例如:@property (readwrite,nonatomic)NSString *name; //等价于
- (NSString *)name;
- (void)setName:(NSString *)name
第三类:语义设置(assign,retain,copy)
1,assign如果属性是⾮对象类型(比如int,float等)属性的语义设置使用assign
2,retain如果属性是对象类型(⽐如NSStrng、NSArray等)属性的语义设置使用retain。
3,copy如果属性是对象类型并且想得到参数的copy,使用copy关键字(NSString类型都用
点语法