ZY---@property和@synthesize

@property :自动生成成员变量的setter和getter方法的声明,用在interface 中
格式 :@property 类型 名称 ;(此处名称为成员变量名,但是不要写下划线)
如:@property int age ;
编译器会按照这个格式转换为- (void)setAge:(int)age;  -(int)age;

@synthesize :自动生成成员变量的setter和getter方法的实现,用在implementation中
如:@synthesize age = _age ;
编译器会把这句代码自动转换为下面所示的代码:
{
_age=age;
}
- (int)age
{
return _age;
}
自动生成了_age的set和get方法的实现,并且访问_age;
所以说在只要像下面这样写:
{
int _age;
}
@property int age; // set和get方法的声明
@implementation Person
@synthesize age = _age;
就可以实现_age的set和get方法了
还可以简写:
简写1. 如果有两个成员变量都是int型的,那么就可以这样写:
@property int age,no; @synthesize age = _age , no = _no;
简写2. @synthesize speed =_speed,wheels =_wheels;
如果在interface中没有声明这两个成员变量,只有property,那么就会自动生成_speed的成员变量,并且是私有的。
简写3. 在xcode4.4以后只写@propertyint speed; 这么一句,实现中也不写什么就可以。
注意1:
@property int speed;这句话干了三件事。
1->.生成了一个private的_speed成员变量。
2->.声明了_speed的setter和getter方法。
3->.实现了_speed的set和get方法
缺点是自动生成的下划线成员变量是私有的,如果想要子类对象方法可以访问的话还需手动写出成员变量,编译器在编译过程中发现有成员变量就不会自动生成
注意2:
如果直接写@synthesize speed;那么默认就是会访问和speed名字一模一样的成员变量,如果没有就生成private的spped成员变量
注意3:
如果同时实现了set和get方法,那么编译器就不会生成下划线的成员变量了
如果手动生成了一个方法,那么编译器还是会生成下划线的成员变量
@synthesize的细节
1.@synthesize age=_age;
setter和getter实现中会访问成员变量_age
如果成员变量_age不存在,就会自动生成一个@private的成员变量_age
2.@synthesize age;
setter和getter实现中会访问成员变量age
如果成员变量age不存在,就会自动生成一个@private的成员变量age
手动实现
若手动实现了setter方法,编译器就只会自动生成getter方法
若手动实现了getter方法,编译器就只会自动生成setter方法
若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量 
即如果有手动实现的,那么就按照我们自己定义的,没有的程序会自动帮我们补齐
@property和@synthesize是帮助我们自动生成set和get方法的
- (void)setAge:(int)age
@interface Person : NSObject
//.m文件中

 

 

 

格式 :@synthesize  变量名 = 将要访问的成员变量名称 ;(此处变量名相当于方法声明中传的参数的名称)

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值