synthesize
在這里總結(jié)一下這個(gè)常用的關(guān)鍵字
首先:
實(shí)例變量 = 成員變量 = ivar
一般如果了屬性的時(shí)候,編譯器會(huì)自動(dòng)編寫(xiě)訪問(wèn)屬性需要的方法会钝,這個(gè)過(guò)程叫做自動(dòng)合成。除了生成代碼之外疑俭,編譯器還會(huì)自動(dòng)向類(lèi)中添加適當(dāng)類(lèi)型的實(shí)例變量遥巴,并且在屬性的前面加下劃線,作為實(shí)例變量的名字悴务。
@interface CCObject :NSOject
@property NSString *name;
@end
在上面的代碼中會(huì)生成一個(gè)實(shí)例變量:_name
睹限。這時(shí)候 synthesize 關(guān)鍵字允許我們來(lái)指定這個(gè)實(shí)例變量的名字:
@implementation CCObject
@synthesize name= _myName;
@end
這樣本來(lái)實(shí)例名字是_name
就會(huì)變成_myName
了,一般情況下就使用默認(rèn)的名字就好了。
如果用關(guān)鍵字置頂?shù)某蓡T變量的名字已經(jīng)存在了羡疗,那么就不回再生成實(shí)例了染服。
那在什么情況下我們需要主動(dòng)使用 synthesize 呢。
在上面我們說(shuō)到叨恨,編譯器會(huì)自動(dòng)幫我們自動(dòng)合成實(shí)例變量柳刮,那么什么時(shí)候不回自動(dòng)合成,什么時(shí)候我們就應(yīng)該會(huì)使用 synthesize特碳,不回自動(dòng)合成的情況有:
- 同時(shí)重寫(xiě)了 setter 和 getter方法
- 重寫(xiě)了 readonly 屬性的 getter
- 使用了 @dynamic
- 在 @protocol 中定義的所有屬性
- 在 category 中定義的所有屬性
- 重載的屬性