今天碰到一個基礎問題,須要自定義set方法,原本挺順利的,定義一個屬性xcode
.h文件 @property (nonatomic, strong) NSString *name .m文件 - (void)setName:(NSString*)name { _name = name; }
上面這麼寫你們應該都能理解,即自定義set方法的標準寫法。後來屬性的名稱改了一下,忘記了改set方法,致使設置屬性時走不到自定義方法中,搞了半天,終於找到問題,我想說的不是這個,這個只是原由,要說的是解決問題過程當中碰到的一個問題:同時使用自定義 get/set 方法的注意點。ide
或許你認爲,這還不簡單,以下:
atom
.h文件 @property (nonatomic, strong) NSString *name .m文件 - (void)setName:(NSString*)name { _name = name; } - (NSString*)name { return _name }
但實際上,xcode7.2給出了以下錯誤:code
/Users/zoubon/testproject/testpro/testpro/testProperty.m:21:5: Use of undeclared identifier '_name'; did you mean 'name'?
找不到標識符_name,奇怪,_name不就是屬性name的別名嗎?get
確實是,在自定義單獨的一個get或set方法時,上面的寫法沒有問題,但兩個同時存在時,就錯了,緣由暫不深究,就說解決方法吧,一個久遠的關鍵字:@synthesize編譯器
@synthesize first = _first
好久之前@synthesize就不用了,編譯器自動生成屬性的get/set方法,想不到同時自定義時,派上了用場,先寫到這裏吧,或許還有一些緣由或方法我沒有想到,後面再補充吧編譯