2016-02-11 54 views
2

我想聲明不帶ivar的@property。如果我用strong,weak或assign聲明@property,有什麼區別嗎?如果@property沒有ivar,strong,weak和assign之間有什麼區別?

+1

呃...你讀過關於封裝的文檔嗎?我們來:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html – holex

+0

我投票結束這個問題作爲題外話,因爲它似乎OP有顯示零利益,以閱讀立即回答他們的問題的基本文件。 – holex

+3

我重新打開了這個問題,因爲它是由於錯誤的原因而關閉的。 OP沒有問強弱之間有什麼區別。 OP在詢問物業是否由伊娃支持時是強還是弱。 – rmaddy

回答

2

@property聲明定義與財產的用戶的合同。例如,如果聲明爲weak,那麼屬性的用戶知道傳遞的對象不會被保留。

無論該財產是否由伊娃支持,本合同應該是真實的。

對於您的情況,該屬性應該是strong,weakassign,具體取決於您的財產執行情況以及您希望爲該財產提供的合同。

0

這取決於屬性是什麼類型。例如,對於像NSInteger這樣的基本類型,您不能使用strongweak屬性聲明屬性。 Xcode會告訴你一個錯誤。 因此,這些聲明是無效的:

@property (nonatomic, strong) NSInteger max; 
@property (nonatomic, weak) NSInteger max; 
@property (nonatomic, copy) NSInteger max; 

因爲strongweakcopy的對象類型和NSInteger的屬性沒有對象類型。這是原始類型。因此,下面的聲明是有效的:

@property (nonatomic, assign) NSInteger max; 

屬性assignweakstrongcopyunsafe_unretained指定由物業支持伊娃的內存管理規則。所以如果你不打算爲屬性創建ivar(假設你想提供你自己的getter/setter並且屬性不會存儲任何值),那麼你將指定什麼屬性並不重要。但正如我上面提到的,你不能爲原始類型指定對象類型的屬性。

+0

這不是OP詢問的問題。看到我的評論下面的問題。 – rmaddy

+0

@rmaddy此聲明有什麼問題 '屬性賦值,弱,強,複製和unsafe_unretained指定由屬性支持的ivar的內存管理規則。所以*如果你不打算爲屬性創建ivar *(假設你想提供你自己的getter/setter並且屬性不會存儲任何值),那麼你要指定什麼屬性並不重要。「 ? – curious

相關問題