Iphone 对委托使用赋值

Iphone 对委托使用赋值,iphone,ios,Iphone,Ios,我有一个下载管理器,它在数据准备好时异步调用viewController的委托方法,但是如果用户按back(viewController被删除并解除分配),下载管理器将尝试向未定义的委托发送消息。 为了避免这种情况,我试图在数据准备就绪时检查委托,以确保它不是nil,并响应我试图调用的选择器。但是,当我尝试检查它是否为零时,会引发一个异常 我使用assign属性not retain定义了委托 我应该如何检查以避免委派未定义的控制器 谢谢听起来好像你用错误的方式实现了委托 下载管理器应包含名为的实

我有一个下载管理器,它在数据准备好时异步调用viewController的委托方法,但是如果用户按back(viewController被删除并解除分配),下载管理器将尝试向未定义的委托发送消息。 为了避免这种情况,我试图在数据准备就绪时检查委托,以确保它不是nil,并响应我试图调用的选择器。但是,当我尝试检查它是否为零时,会引发一个异常

我使用assign属性not retain定义了委托

我应该如何检查以避免委派未定义的控制器


谢谢

听起来好像你用错误的方式实现了委托

下载管理器应包含名为的实例变量,例如
delegate
。初始化下载管理器后或初始化时,viewController将自己设置为该下载管理器的代理-例如
downloadManager.delegate=self

您的viewController在卸载/解除锁定后应该为零,这有点像`

- (void)dealloc
{
    downloadManager.delegate = nil;
    ...
    [super dealloc];
}

现在,下载管理器可以检查自己的实例变量(委托)是否为非零等,而不会出现任何问题。

在我看来,最好的解决方案是不使用委托,而是使用NSNotificationCenter发送通知。

您的viewController应该为此通知定义了观察者。

在我的情况下,使用NotificationCenter是一个有效的解决方案,但使用委托更合适。谢谢:)我一般不会建议不要使用授权。授权对于一对一的关系来说是很好的,并且让他们变得明显。每当我有一个1对N的关系时,我都会使用通知。我缺少的一点是在我的控制器解除分配时将委托设置为零。谢谢:)