黑马程序员——OC基础语法—@property和@synthesize使用

OC基础语法—@property和@synthesize使用

 

 @property 和 @synthesize 和点方法类似,简化那些不必要的代码。只适用setter和getter,作用是让编译器自动生成setter和getter方法。@propety用在@interface 类的声明中,@synthesize 用在@implementation 类的实现中,举个例子:

 

 @property int age;           //  用这句代码就等价于下面两句,自动生成成员变量_age的setter方法和getter方法的申明

 

- (void)setAge:(int)age;

-(int)age;

 

 @synthesize age=_age;      //  用这句代码等价于下面两句,自动生产成员变量_age的setter方法和getter方法的实现

- (void)setAge:(int)age

{

  _age=age;

}

-(int)age

{

  return _age;

}

 1.@ property的作用:

   用在@inteface中

用来自动生成setter和getter的声明

 用@property int age;就可以代替下面的两行

- (int)age;   // getter

- (void)setAge:(int)age;  // setter

 

 2.@synthesize 的作用:

用在@implementation中

用来自动生成setter和getter的实现

 

用来自动生成setter和getter的实现

用@synthesize age = _age;就可以代替

- (int)age{

return _age;

}

- (void)setAge:(int)age{

_age = age;

}

 

 

其中 @synthesize age=_age;  这里的_age是成员变量,想对哪个变量进行访问就填哪个变量。

如果我们不定义成员变量,却还是让 @property 和 @synthesize 自动生成set和get方法,编译器并不会报错,而且会帮助我们生成这个没有定义的变量,但是类型是@private的。

 

  @interface

  @property int no;

@end 

  @implementation

  @synthesize no=_no;

 @end

 

这段代码中,没有去定义成员变量_no ,@property会自动帮我们生成一个@private _no 以供完成使用。

 

3.@ synthesize 使用注意:

1). @synthesize age = _age;

setter和getter实现中会访问成员变量_age

如果成员变量_age不存在,就会自动生成一个@private的成员变量_age

2).@ synthesizeage;

setter和getter实现中会访问成员变量age

如果成员变量age不存在,就会自动生成一个@private的成员变量age

3).手动实现

若手动实现了setter方法,编译器就只会自动生成getter方法

若手动实现了getter方法,编译器就只会自动生成setter方法

若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量

 

在Xcode4.4以后,@synthesize可以省略不写,一个@property可以做三件事情,第一创建成员变量,第二生成set和get的声明,第三生成set和get的实现。

注意点:1.如果自己有定义成员变量或set和get方法,编译器不会再自动生成,优先读取自己定义的。

        2.编译器自动生成的变量是@private类型,子类不能直接访问。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值