2012-01-10 31 views
3

可能重複:
using ARC, lifetime qualifier assign and unsafe_unretained爲什麼我應該更喜歡unsafe_unretained限定符而不是分配弱引用屬性?

什麼是兩者之間的區別?

@property(unsafe_unretained) MyClass *delegate; 
@property(assign) MyClass *delegate; 

兩者都是非歸零弱引用,對嗎?那麼是否有什麼理由爲什麼我應該寫更長,更難讀unsafe_unretained而不是assign

注:我知道有weak這是一個歸零參考。但它只是iOS> = 5。

+0

查看答案在這裏找到:http://stackoverflow.com/questions/8397511/using-arc-lifetime-qualifier-assign-and-unsafe-unretained – 2012-01-10 16:43:17

回答

9

在屬性訪問器中,是的,它們是相同的。 assign屬性將映射到unsafe_unretained這種情況。但考慮手動寫入伊娃而不是使用伊娃綜合。

@interface Foo 
{ 
    Bar *test; 
} 
@property(assign) Bar *test; 
@end 

此代碼現在在ARC下是不正確的,而在ARC之前它不是。所有Obj-C對象的默認屬性爲__strong。做這件事的正確方法如下。

@interface Foo 
{ 
    __unsafe_unretained Bar *test; 
} 
@property(unsafe_unretained) Bar *test; 
@end 

或合成伊娃剛剛@property(unsafe_unretained) Bar *test

因此,其實它只是寫同樣的事情不同的方式,但它顯示了不同的意圖。

+0

我可以在iOS 4中使用伊娃合成嗎?或者這只是iOS 5?使用iVar合成時還有什麼我必須記住的? – openfrog 2012-01-10 17:51:19

+0

iOS的所有版本返回2.0支持此。 – 2012-01-10 17:54:11

相關問題