oc当中通过@property和 @synthesize 配对使用来自动生成变量的set和get方法,通过使用点语法可以大大减少我们程序员代码量,也方便学习过其他语言的人上手oc语言
@property有以下几种属性
readwrite 默认
assign 默认
readonly 只读(只有get方法,禁用set方法)
给setter和getter方法起别名(setter = a:, getter = b)
atomic 开启多线程变量保护,会消耗一定的资源(非原子性,保证多线程安全)
nonatomic:禁止多线程变量保护,提高性能
assign:直接赋值,适用于基本数据类型(非对象类型)
retain:赋值时做内存优化,使用于对象类型
copy:复制一个副本,适用于特殊的对象类型(常用于NSstring)(有NSCoping协议的才可以用copy)
assign retain copy的setter方法的内部实现
assign:
@property float price;
内部实现:
- (void)setPrice:(float)price
{
_price = price;
}
getter是:
- (float)price
{
return _price;
}
retain:
@property (retain, nonatomic) NSString *company;
内部实现:
- (void)setCompany:(NSString *)company{
if(_company != company){
[_company release];
[company retain];
_company = company;
}
}
copy:
@property (copy, readwrite, nonatomic) NSString *company;
内部实现:
- (void) setCompany:(NSString *)company{
if(_company != company){
[_company release];
[company copy];
_company = company;
}
}
oc当中通过@property和 @synthesize 配对使用来自动生成变量的set和get方法,通过使用点语法可以大大减少我们程序员代码量,也方便学习过其他语言的人上手oc语言
@property有以下几种属性
readwrite 默认
assign 默认
readonly 只读(只有get方法,禁用set方法)
给setter和getter方法起别名(setter = a:, getter = b)
atomic 开启多线程变量保护,会消耗一定的资源(非原子性,保证多线程安全)
nonatomic:禁止多线程变量保护,提高性能
assign:直接赋值,适用于基本数据类型(非对象类型)
retain:赋值时做内存优化,使用于对象类型
copy:复制一个副本,适用于特殊的对象类型(常用于NSstring)(有NSCoping协议的才可以用copy)
assign retain copy的setter方法的内部实现
assign:
@property float price;
内部实现:
- (void)setPrice:(float)price
{
_price = price;
}
getter是:
- (float)price
{
return _price;
}
retain:
@property (retain, nonatomic) NSString *company;
内部实现:
- (void)setCompany:(NSString *)company{
if(_company != company){
[_company release];
[company retain];
_company = company;
}
}
copy:
@property (copy, readwrite, nonatomic) NSString *company;
内部实现:
- (void) setCompany:(NSString *)company{
if(_company != company){
[_company release];
[company copy];
_company = company;
}
}
|
|