2017-05-24 39 views
1

我一直在閱讀一個使用包含幾個視圖控制器的故事板的開源項目。出於某種原因,用戶界面元素不會在.h文件中使用@property IBOutlet聲明,而是伊娃的(有時__weak)在.m文件,像這樣宣稱:爲什麼要讓一個IBOutlet變量成爲一個ivar(不是屬性)?

@implementation FunnyScreen { 
    __weak IBOutlet SillyButton *bouton; 
} 

什麼,而不是我一直在做並看到其他人這樣做:

@interface FunnyScreen: UIViewController 
@property (nonatomic,strong) IBOutlet SillyButton *bouton; 

有誰知道爲什麼有人會寫代碼,如第一個例子,即伊娃方法?它有什麼用途?我保持開放的態度。

回答

2

關於合成屬性的好處是,它在一行簡潔的代碼中提供了三件事情:存儲和兩個存取方法。

但是如果你不需要這些存取方法呢?如果一旦這個值設定了,它將永遠不會改變?而且你不需要在這門課以外進行訪問(這通常是IBOutlet的一個很好的規則)?

那麼,你只需要存儲,這是在執行塊中聲明的伊娃。

就我個人而言,我經常使用ivars:即使在無處不在的屬性的這些日子裏,不變的內部價值。我不能肯定地說這是這段代碼的作者在想什麼,但這似乎是合理的。

+0

好吧,你爲什麼認爲他們變弱了? – asdfkjaasdflf

+0

偉大的問題。我沒有很好的答案。無論是習慣/反應,還是(似乎都不太可能),他們希望某些時候它會消失,但在此之後不會再被設置,並且需要自動 - 零的行爲。 –

相關問題