2011-12-08 21 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

的“属性声明”部分,希望这有助于你有点...