2011-12-08 22 views
6

在iOS 5中,「保留」和「釋放」不再受支持。新的方式是「強」和「弱」。iOS5 @特性變化

iOS 4的代碼:

@property(nonatomic, retain) 
@property(nonatomic, assign) 

iOS 5的代碼:

??? 
??? 

回答

12

「在iOS 5中,保留版本不支持任何更多的」他們是,只是不使用ARC時。

使用ARC時,-[<NSObject> retain]是無操作的。

對於屬性,如果使用ARC,則可以使用strong,但這不是必需的(如果您願意,也可以使用retain)。 strongretain是相同的:

@property(nonatomic, strong) 
@property(nonatomic, assign) 

只要確保你是一致的(不要在同一個項目中同時使用strongretain)。

+0

順便提一下,Objective-C團隊這樣做是爲了與舊代碼向後兼容。 – 2011-12-08 18:55:05

+0

任何不使用strong/retain在一起的嚴重原因?這只是一個可讀性問題?基本上是 –

+0

@craig。我認爲這可能會讓剛接觸ARC的人感到困惑。 – 2011-12-08 19:10:53

5

他們是不完全相同,但基本上retain := strongassign := weak 我建議採取看看ARC Release notes

+3

實際上,'assign'比'weak'更接近'unsafe_unretained'。不動產分配是一個新概念。 –

+2

另請注意,弱對於基本類型(如int)不起作用。你必須使用分配。 –

4

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

的「屬性聲明」部分,希望這有助於你有點...