1. 當編譯器遇到 @property時,會自動展開成getter和setter的聲明;
@property 只用來聲明
@synthesize 只用來實現
@synthesize 寫了後,可以不需要寫成員變量,會默認幫寫上。
@synthesize 默認會去訪問跟age同名的變量,如果找不到同名的變量,會自動生成一個私有的同名變量age。
@synthesize生成的成員變量是私有的!
@synthesize會自動生成getter和setter的實現
成員變量一般帶下劃線
//age = _age 代表getter和setter會去訪問_age這個成員變量;即不會再使用age賦值,而是會用_age; age成員變量已經不存在了,不會再生成了。
@synthesize age = _age;
個人覺得這樣的作用是,讓方法名與成員變量名不一致,成員變量前面帶下劃線。(@property 聲明的setter getter方法名不帶下劃線)
如果想讓成員變量爲公有,那麼就需要在.h文件裏定義成員變量(帶下劃線的)。
/*************************************/
Xcode 4.5 之後: @synthesize 都省了,只要檢測到有@property,編譯器就會自動生成@synthersize,意思就是自動生成getter setter方法。
並且,默認生成的成員變量都是下劃線開頭的,且下劃線開始的成員變量是私有的!
如果找不到_age這個成員變量,會自動生成一個叫做_age的私有成員變量。如果也想給子類訪問,那麼就需要在.h裏把這些變量聲明一下。
補充:
@property @synthesize 是編譯器的一個特性,編譯器會幫我們把語法展開
我們自己手動實現setter方法後,編譯器就不會再生成setter方法了。