在iOS 5中,「保留」和「釋放」不再受支持。新的方式是「強」和「弱」。iOS5 @特性變化
iOS 4的代碼:
@property(nonatomic, retain)
@property(nonatomic, assign)
iOS 5的代碼:
???
???
在iOS 5中,「保留」和「釋放」不再受支持。新的方式是「強」和「弱」。iOS5 @特性變化
iOS 4的代碼:
@property(nonatomic, retain)
@property(nonatomic, assign)
iOS 5的代碼:
???
???
「在iOS 5中,保留版本不支持任何更多的」他們是,只是不使用ARC時。
使用ARC時,-[<NSObject> retain]
是無操作的。
對於屬性,如果使用ARC,則可以使用strong
,但這不是必需的(如果您願意,也可以使用retain
)。 strong
和retain
是相同的:
@property(nonatomic, strong)
@property(nonatomic, assign)
只要確保你是一致的(不要在同一個項目中同時使用strong
和retain
)。
他們是不完全相同,但基本上retain := strong
和assign := weak
我建議採取看看ARC Release notes
實際上,'assign'比'weak'更接近'unsafe_unretained'。不動產分配是一個新概念。 –
另請注意,弱對於基本類型(如int)不起作用。你必須使用分配。 –
nonatomic
財產狀態的對象不是線程安全的,這意味着如果不同的線程試圖訪問該對象比壞事情可能發生,但這比原子屬性快得多。
strong
與ARC一起使用,它基本上可以幫助您,無需擔心對象的保留數量。 ARC完成後會自動爲您發佈。使用關鍵字strong
意味着您擁有該對象。
weak
所有權意味着你不擁有它,它只是跟蹤對象,直到它被分配的對象停留,只要第二個對象被釋放,它就失去了價值。例如。使用obj.a=objectB;
且a屬性較弱,只有在objectB保留在內存中時纔會有效。
copy
物業是很好的說明如下https://stackoverflow.com/a/5002646/919545
strong,weak,retain,copy,assign
是互斥的,所以你不能一個單獨的對象上使用他們...閱讀http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1
的「屬性聲明」部分,希望這有助於你有點...
順便提一下,Objective-C團隊這樣做是爲了與舊代碼向後兼容。 – 2011-12-08 18:55:05
任何不使用strong/retain在一起的嚴重原因?這只是一個可讀性問題?基本上是 –
@craig。我認爲這可能會讓剛接觸ARC的人感到困惑。 – 2011-12-08 19:10:53