一些 Cocoa 和 Cocoa Touch 类将它们的委托属性声明为assign
而不是weak
,这会强制类的用户nil
在dealloc
-(void)dealloc
{
self.imageScrollView.delegate = nil;
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
这很麻烦。
苹果为什么要这样做?
一些 Cocoa 和 Cocoa Touch 类将它们的委托属性声明为assign
而不是weak
,这会强制类的用户nil
在dealloc
-(void)dealloc
{
self.imageScrollView.delegate = nil;
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
这很麻烦。
苹果为什么要这样做?
原因是并非所有系统类都使用 ARC 编译。
如果您需要管理资源而不是释放实例变量,您可以实现一个 dealloc 方法。您不必(实际上您不能)释放实例变量,但您可能需要在系统类和其他未使用 ARC 编译的代码上调用 [systemClassInstance setDelegate:nil]。
请参阅 developer.apple.com 上的此页面:过渡到 ARC 发行说明