2011-09-08 47 views
1

如果我想聲明一個簡單的按鈕,我必須做這兩個以下的事情嗎?Objective-C:聲明一個UIButton

內@interface:

UIButton *button;

@property (nonatomic, retain) IBOutlet UIButton *button;

是財產申報不足,或兩者都需要?如果是這樣,爲什麼?

回答

2

第一部分,在@interface中是一個伊娃爾宣言。如果你聲明一個屬性,你不再需要這樣做。事實上,停止這樣做是一個好主意,因爲這是您在頭文件中公開的私有實現細節。

第二部分是屬性聲明。這是你真正需要的。但是,如果您聲明該屬性,則還需要綜合訪問器。在您的.m文件,在你@implementation塊的頂部,只要堅持

@synthesize button; 

@synthesize告訴使用什麼伊娃其後備存儲的性能。而在現代運行時(即iOS和64位OS X),它也將爲您合成ivar。所以我猜如果你正在編寫32位OS X代碼,你仍然需要伊娃聲明,但這是唯一的時間。

0

蘋果公司已經通過添加一個功能(非脆弱的abi blablabla)來剔除這種冗餘。你可以在@interface ClassName {}內寫入@property和@synthesize,而不使用ivars。

+2

我想你是指自動@synthesizing的屬性。我們已經有一段時間沒有脆弱的ivars了。 –

+0

對不起,我錯了。 – ZhangChn

+0

公平地說,32位OS X程序仍然具有非脆弱的伊娃問題,但iOS和64位OS X不支持,而這正是目前大多數開發的方向。 –