@property和@synthesize

/**
@property和@synthesize關鍵字是針對成員變量以及get/set方法而言的
從Xcode4.4以後@property已經獨攬了@synthesize的功能主要有三個作用:
(1)生成了成員變量get/set方法的聲明
(2)生成了私有的帶下劃線的的成員變量因此子類不可以直接訪問,但是可以通過get/set方法訪問。那麼如果想讓定義的成員變量讓子類直接訪問那麼只能在.h文件中定義成員    變量了,因爲它默認是@protected
(3)生成了get/set方法的實現
注意:
如果已經手動實現了get和set方法的話Xcode不會再自動生成帶有下劃線的私有成員變量了
因爲xCode自動生成成員變量的目的就是爲了根據成員變量而生成get/set方法的
但是如果get和set方法缺一個的話都會生成帶下劃線的變量
在Xcode4.4版本之前@property和@synthesize的功能是獨立分工的:

@property的作用是:自動的生成成員變量set/get方法的聲明如代碼:
@property int age; 它的作用和下面兩行代碼的作用一致
- (void)setAge:(int)age;
- (int)age;
注意:屬性名稱不要加前綴_ 否則生成的get/set方法中也會有下劃線

@synthesize的作用是實現@property定義的方法代碼如:
@synthesize age
將@property中定義的屬性自動生成get/set的實現方法而且默認訪問成員變量age
如果指定訪問成員變量_age的話代碼如:
@synthesize age = _age;意思是:
把@property中聲明的age成員變量生成get/set實現方法,並且在實現方法內部
訪問_age這個成員變量,也就意味着給成員 _age 賦值
注意:訪問成員變量 _age 如果在.h文件中沒有定義_age成員變量的話,就會在.m文件中自動生成@private類型的成員變量_age
*/


#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
@property int age;
// 成員變量 _age get/set方法的聲明 (xCode 4.4之前)
//- (void)setAge:(int)age;
//- (int)age;
// 驗證方法
- (void)test;
- (void)setWeight:(int)weight;
- (int)weight;
@property int _age;
// 屬性中帶有下劃線 _ 那麼生成的get/set也會有下劃線 _
//- (void)set_age:(int)_age;
//- (int)_age;

@property NSString *name;
@end
/********************Person.m文件***********************************/
#import "Person.h"
@implementation Person
@synthesize age = _age;
/*
@synthesize age = _age; 和下面的代碼效果一致
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
*/
// 在.h文件中沒有聲明成員變量_age 但是@synthesize age = _age 自動生成了私有的成員變量 _age
- (void)test
{
NSLog(@"%d",_age);
}
@end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章