unsafe_unretained属性有什么用?

liz*_*iza 12 iphone ios

我知道的定义unsafe_unretained.

所以我不希望任何人写出它的定义.

我想知道它在示例中的用法,以及它如何与内存管理一起使用.

Jon*_*asG 33

unsafe_unretained仅存在于ARC(自动参考计数)中.它的工作方式与assignMRC(手动参考计数)相同.这些属性不会被保留.通常,您希望将这些属性用于委托,因为它们不需要保留它们的所有者.

weak属性就像unsafe_unretained,除了它们更聪明一些.释放分配给属性的对象时nil,会自动变为弱引用,以避免在向该对象发送消息(其内存地址)时发生崩溃.

unsafe_unretained属性不这样做.它们将始终保持分配给它的内存地址(除非您手动更改它),而不管与该地址关联的对象.在这种情况下,弱引用可以防止崩溃,但结果仍然不会如预期的那样.如果您的代码组织良好且编写良好,则不应发生这种情况.

那你为什么要用unsafe_unretained而不是weak?弱引用仅适用于iOS 5及更高版本,因此如果您要构建面向iOS 4的ARC应用程序,则需要使用unsafe_unretained属性.再次,向已发布的属性发送消息并不是您想要在任何代码中拥有的任何内容.如果您的代码组织良好,那么您应该没有任何问题.