/** @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
@property和@synthesize
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.