检查是否有代表在听?

时间:2013-05-03 15:34:24

标签: objective-c

我有一个将委托消息发送到另一个类的类。 如果其他类没有收听,则应用程序崩溃。 我正在寻找一种方法来检查在发送消息之前其他类是否正在侦听。

所以在发布委托的类中,我有这个条件检查:

       if ([self.delegate respondsToSelector:@selector(NewDataFromSocketWithString:WithCommand:)])
           [self.delegate NewDataFromSocketWithString:final WithCommand:c];

在某种程度上,条件总是正确的,即使获得委托的类已经释放并且不再存在。

如何在发布前检查代表以消除崩溃?

1 个答案:

答案 0 :(得分:5)

  

即使获得委托的类已经发布并且不再存在。

...你测试过这种情况吗?如果你引用你的代表并不弱,那么这将不会发生。如果委托实际上已被释放,则self.delegate应返回nil,这意味着您的if语句将评估为false。

您的if语句评估为true的事实告诉我您的委托仍然设置。您使用ARC还是手动管理内存?如果是后者,则您希望将您的媒体资源设置为assign - 如果是前者,则您希望将您的代理设置为{{1 }}