使用ARC,生命周期限定符分配和unsafe_unretained

时间:2011-12-06 09:14:32

标签: objective-c ios automatic-ref-counting

我对这两个资格赛有点困惑...... 使用ARC而不是使用weak(即如果我需要支持iOS 4),我可以使用unsafe_unretained丢失auto-nil功能......最终结果似乎与assign类似。

  • 我可以与unsafe_unretained交换assign吗?
  • 这些限定符是否相同?

关于这个论点的Apple文档的任何链接都会非常有趣......我只能找到几行here

1 个答案:

答案 0 :(得分:16)

Clang的technical specification of ARC详细介绍了限定符的工作原理。

但是,要回答你的问题:assign__unsafe_unretained不是一回事。 assign是一个属性属性,告诉编译器如何合成属性的setter实现,而__unsafe_unretained是一个所有权限定符,告诉ARC如何插入retain / release调用。但它们是相关的:在声明属性时,assign暗示__unsafe_unretained所有权。

在ARC之前,assign是默认的属性所有权限定符;但启用ARC后,可保留对象指针类型的默认值为strong。 (对于标量和其他指针类型,assign仍然是默认值。)