如果我想聲明一個簡單的按鈕,我必須做這兩個以下的事情嗎?Objective-C:聲明一個UIButton
內@interface:
UIButton *button;
和
@property (nonatomic, retain) IBOutlet UIButton *button;
是財產申報不足,或兩者都需要?如果是這樣,爲什麼?
如果我想聲明一個簡單的按鈕,我必須做這兩個以下的事情嗎?Objective-C:聲明一個UIButton
內@interface:
UIButton *button;
和
@property (nonatomic, retain) IBOutlet UIButton *button;
是財產申報不足,或兩者都需要?如果是這樣,爲什麼?
第一部分,在@interface中是一個伊娃爾宣言。如果你聲明一個屬性,你不再需要這樣做。事實上,停止這樣做是一個好主意,因爲這是您在頭文件中公開的私有實現細節。
第二部分是屬性聲明。這是你真正需要的。但是,如果您聲明該屬性,則還需要綜合訪問器。在您的.m文件,在你@implementation
塊的頂部,只要堅持
@synthesize button;
的@synthesize
告訴使用什麼伊娃其後備存儲的性能。而在現代運行時(即iOS和64位OS X),它也將爲您合成ivar。所以我猜如果你正在編寫32位OS X代碼,你仍然需要伊娃聲明,但這是唯一的時間。
蘋果公司已經通過添加一個功能(非脆弱的abi blablabla)來剔除這種冗餘。你可以在@interface ClassName {}內寫入@property和@synthesize,而不使用ivars。
我想你是指自動@synthesizing的屬性。我們已經有一段時間沒有脆弱的ivars了。 –
對不起,我錯了。 – ZhangChn
公平地說,32位OS X程序仍然具有非脆弱的伊娃問題,但iOS和64位OS X不支持,而這正是目前大多數開發的方向。 –