在ARC下,
assign
隐含__unsafe_unretained
所有权
weak
隐含__weak
所有权。
为什么委托属性在iOS7.1 SDK中被赋予assign
但评论为weak
?
答案 0 :(得分:3)
历史。在ARC之前,您使用assign
表示“弱”(非保留)引用。 “弱”只是意味着“我不会将保留称为保留”,这意味着assign
。
在属性之前,我们只知道名为delegate
的内容没有按惯例调用retain
。其他非保留属性需要某种文档。
一直在努力清理iOS SDK以符合更现代的惯例,但仍有一些地方使用较旧的方法。我不确定他们为什么在这里使用id
,但这可能是因为正式和非正式协议的旧习惯。在ObjC 2之前,您无法在协议中使用可选方法,因此您通常使用非正式协议(即您传递了一个裸id
,并检查它是否响应了您所需的内容)。在这种情况下经常使用这种评论协议的方式。 (并不是说这就是这里的原因;我相信UIAlertViewController会发布ObjC 2.只是一个需要很长时间才能完成SDK的事情的例子。)