OC之@property和@synthesize

在OC中经常使用get和set方法,但是当成员变量太多的时候,就要敲很多行get和set方法。在xcode4.4之前,为了简洁代码,可以使用@property声明get和set方法:

@property int age;

就相当于:

- (void)setAge:(int)age;

-(int)age;

后面代码可以就当作正常写了get和set方法一样去调用- (void)setAge:intage;和-(int)age;。

假设_age为成员变量,当然也可以使用@synthesize去代替写出get和set方法的实现:

@synthesize age = _age;

就相当于:

-(void)setAge : (int)age

{

   _age = age;

};

- intage

{

  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控件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值