2013-04-04 263 views
-2

讓創造性質的說我有一點:什麼是在這種情況下

@interface test : NSObject { 
    BOOL bVal; 
} 

人們一直說性能是訪問伊娃一個更好的方式,但他們這樣做只是爲了它赫克?

爲什麼我需要@property在這種情況下,這個伊娃?

我只是想知道,如果人們知道他們爲什麼要做他們被告知的事情,或者我錯過了什麼。

+0

不是真的,我在這裏用一個簡單的布爾非常具體。 – mskw 2013-04-04 20:17:02

+1

屬性的POD類型在此問題的許多實例中的幾個以上都得到解決。更重要的是,你認爲BOOL有什麼不同? – 2013-04-04 20:19:44

+0

假設這個問題很快就會結束,那麼可能就沒有時間讓問題開放了,所以如果你能原諒我,我會直接跳進來說:你使用「簡單的Bool」並沒有任何區別。關鍵問題是封裝,這涉及到數據隱藏和主權,這些封裝都不以任何方式取決於所存儲事物的類型或存儲它的必要步驟。 – Tommy 2013-04-04 20:24:36

回答

1

屬性爲你提供了一些很好的東西,比如合成的getter和setter,它們肯定會以屬性的retain/strong,assign/weak,atomic或non-atomic屬性的最佳方式編寫。如果您不需要在類的外部代碼訪問伊娃都那麼你或許應該申報的實現本身伊娃並保持它完全從外部隱藏起來,比如:

@implementation test { 
    BOOL bVal; 
} 

回答你的其他問題當然,這取決於人。是的,這個網站上有很多人喋喋不休的建議和代碼片段,卻沒有真正理解它們。這裏也有很多人真正知道他們在說什麼。

+0

好吧,這是有道理的,我只用它來允許訪問這個私人ivar。正確? – mskw 2013-04-04 20:51:21

+1

有了最新的LLVM,如果你有財產,你甚至不需要申報伊娃。如果你聲明一個屬性如'@property(nonatomic,weak)BOOL bVal',編譯器會爲你合成ivar'_bVal',但你有正確的想法。如果外部對象需要訪問變量,那麼使用屬性並利用合成的方法通常是一個好主意。對於ARC代碼屬性中的私有ivars,並不會讓你獲得太多。在非ARC代碼中,利用合成的getter和setter,即使對於私有變量,也可以幫助您避免常見的內存管理錯誤。 – 2013-04-04 21:32:27

+0

這就是問題所在,當我可以輕鬆地輸入BOOL bVal時,爲什麼要輸入所有這些?爲什麼?我會這樣做,只要我分配一個Atomic屬性。而且你怎樣才能把弱分配給布爾呢? – mskw 2013-04-04 21:43:12