在OC中常常使用get和set方法,可是当成员变量太多的时候,就要敲不少行get和set方法。在xcode4.4以前,为了简洁代码,可使用@property声明get和set方法:xcode
@property int age;多线程
就至关于:性能
- (void)setAge:(int)age;atom
-(int)age;spa
后面代码能够就看成正常写了get和set方法同样去调用- (void)setAge:intage;和-(int)age;。线程
假设_age为成员变量,固然也可使用@synthesize去代替写出get和set方法的实现:code
@synthesize age = _age;对象
就至关于:内存
-(void)setAge : (int)ageget
{
_age = age;
};
- (int)age
{
retrun _age;
}
【备注】也能够同时声明与实现多个get和set方法,格式为:
@property int age1,age2,age3;
@synthesize age1 = _age1,age2 =_age2;
当上述代码中的成员变量_age1和_age2不存在时,系统可自动生成@private类型的_age1和_age2成员变量,代码仍可正常运行。
对于实现时只写@synthesize age,但类中同时存在成员变量age和_age,则默认状况下会访问与age名字同样的成员变量,即访问age而不是_age。
在xcode4.4以后,@property的功能更增强大,它同时具备了@synthesize的功能,好比@property int age;具备以下三个功能:
(1) 生成_age成员变量的get和set方法的声明
(2) 生成_age成员变量的get和set方法的实现
(3) 生成一个名为_age的成员变量
@property的参数:
(1) set方法内存管理相关的参数
(a) retain:release旧值,retain新值(适用于OC对象类型)
(b) assign:直接赋值(默认,适用于非OC对象类型),经常使用在BOOL、int等基本数据类型。
(c) copy:release旧值,copy新值,经常使用在NSString对象
(2) 是否要生成set方法
(a) readwriter:同时生成set和get方法的声明和实现
(b) readonly:只生成get的声明和实现
(3) 多线程管理
(a) nonatomic:性能高(通常都是使用这个)
(b) atomic:性能低(默认)
(4) set和get方法的名称
(a) setter:决定了set方法的名称,必定要加个冒号“:“
(b) getter:决定了get方法的名称,不要加冒号
(5) strong和weak
(a) strong:用于通常对象
(b) weak:用于UI控件