Objective c 检查是否有代表正在侦听?

Objective c 检查是否有代表正在侦听?,objective-c,Objective C,我有一个类向另一个类发送委托消息。 如果其他类没有侦听,则应用程序将崩溃。 在我发送消息之前,我正在寻找一种方法来检查另一个类是否正在侦听 因此,在发布委托的类中,我有以下条件检查: if ([self.delegate respondsToSelector:@selector(NewDataFromSocketWithString:WithCommand:)]) [self.delegate NewDataFromSocketWithString:final

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

因此,在发布委托的类中,我有以下条件检查:

       if ([self.delegate respondsToSelector:@selector(NewDataFromSocketWithString:WithCommand:)])
           [self.delegate NewDataFromSocketWithString:final WithCommand:c];
其中,不管怎样,条件总是真的,即使获取委托的类已经被释放并且不再存在

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

即使获取委托的类已被释放且不再存在

…你测试过这种情况吗?如果您没有弱引用您的代理,那么这种情况就不会发生。如果代理实际已被释放,则
self.delegate
应返回
nil
,这意味着您的If语句将计算为false


您的if语句的计算结果为true,这一事实向我表明,您的委托仍处于设置状态。您是使用ARC还是手动管理内存?如果是后者,则希望将属性设置为
assign
——如果是前者,则希望将代理设置为
weak

您的问题似乎是您使用的是伪代理指针,而不是代理没有“响应”。您需要确保委托对象被保留,或者确保如果对象被销毁,指针将被设置为nill。我不使用ARC,我只在需要侦听消息的地方执行以下操作:socketInstance.delegate=self;在相关课程中。稍后,该类将被替换(它是一个主视图)。我还应该对委托本身做些什么来释放它?@Rant您应该使用ARC。但是,如果没有,则需要在释放委托对象时手动将委托设置为
nil
弱修复了该问题。如果你将
委托
设置为
保留
属性,那么你可能会有一个保留周期。我想,在2013年使用ARC是一个不错的主意,为什么不使用它呢?@SergiusGee你说得对,但我使用Xcode已经两年了,没有它,今天我只是害怕学习它的所有规则,所以我只能选择非ARC。我知道这是一个老线程,但这就像是说我已经习惯了我的iPhone1,我不会为2,3,4,5和即将到来的六部而烦恼。永远跟上时代!