就我所知,@property聲明瞭.h文件中的getter和setter,@synthesize實現了.m文件中的getter和setter。此外,可以爲getter和setter編寫自己的實現,而不是使用@synthesize。Objective-C:@property聲明沒有實現(@synthesize)
所以如果我們總是需要實現setter/getter爲什麼我們需要另外聲明它呢? @property似乎對我來說是語義冗餘的,也是bug的來源。
當我聲明@property時會發生什麼,但忘記用@synthesize或手動實現它?當我使用@synthesize並忘記@property聲明時會發生什麼?
不錯,他們加了這個。感謝您的迴應 –
還有一種情況,您需要同時使用屬性和合成。編譯器將使用屬性名稱加下劃線前綴來創建伊娃。如果ivar _propertyname與私有實例變量衝突,則需要將其合成到新的ivar。例如:如果您是UIToolbar的子類,並聲明瞭一個命名它的委託屬性,您將嘗試使用ivar _delegate時會出錯,因爲UIToolbar包含一個私有實例變量id _delegate。你可以通過使用'@synthesize delegate = _mydelegate;'來解決這個問題。 – lolol