为什么要使用UIWebViewDelegate的assign而不是weak?

4
通常 UIKit/Foundation 框架中的所有委托都是弱引用,除了 UIWebView。UIWebView 的 delegate 属性可以参考 这里
@property(nonatomic, assign) id< UIWebViewDelegate > delegate;

我对此感到感兴趣,因为当您在解除UIWebView的ViewController时忘记nil out delegate,这会导致我的应用程序多次崩溃。通常情况下,您不希望出现这样的情况,因此可能有特定的原因,说明为什么此默认值不设置为weak。


好问题。向苹果提交一个漏洞报告。https://bugreport.apple.com - rmaddy
@rmaddy,你为什么认为这是一个 bug?它也可能是有意为之的。 - Kunal Balani
苹果在一段时间前将大多数assign委托改为了weak。不确定为什么UIWebView也没有被更新。 - rmaddy
看起来确实像是一个 bug。如果使用 weak,当对象被释放时指针会变成 nil。如果使用 assign,指针会指向一个已经死亡的对象,可能导致僵尸对象。如果你写代码时期望弱引用变成 nil,就像在 ARC 中通常可以做到的那样,这可能会导致崩溃。 - Duncan C
1
我会像rmaddy建议的那样提交一个错误报告并查看苹果公司的回复。提交错误报告比其他方式向苹果公司提问更有可能得到答案,如果确实存在问题,它将被列入他们的修复清单中。 - Duncan C
显示剩余3条评论
1个回答

0
假设UIWebViewDelegate被定义为WEAK,那么在ARC中它将自动nil委托的引用。因此,UIWebViewDelegate被标记为ASSIGN,因为如果该类未使用ARC编译,则我们必须确保将其设置为nil。

1
如果是这样的话,他们应该为所有代表提供而不仅仅是UIWebView。 - Kunal Balani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接