为什么Apple使用assign而不是weak来存储委托?

use*_*951 2 cocoa cocoa-touch delegates automatic-ref-counting declared-property

一些Cocoa和Cocoa Touch类声明它们的委托属性assign而不是weak,它强制类的用户nil输出属性dealloc

-(void)dealloc
{
    self.imageScrollView.delegate = nil;
    self.tableView.delegate = nil;
    self.tableView.dataSource = nil;
}
Run Code Online (Sandbox Code Playgroud)

这非常麻烦.

为什么苹果会这样做?

Phi*_*ade 5

原因是并非所有系统类都使用ARC编译.

如果需要管理除释放实例变量之外的资源,则可以实现dealloc方法.您不必(实际上您不能)释放实例变量,但您可能需要在系统类和未使用ARC编译的其他代码上调用[systemClassInstance setDelegate:nil].

请参阅developer.apple.com上的此页面:转换为ARC发行说明