3

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

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

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

不知何故,条件总是为真,即使获得委托的类已经被释放并且不再存在。

在发布之前如何检查委托以消除崩溃?

4

1 回答 1

5

即使获得委托的类已经被释放并且不再存在。

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

您的 if 语句评估为 true 的事实向我表明您的代表仍然设置。您是使用 ARC 还是手动管理内存?如果是后者,您需要将您的属性设置为assign- 如果是前者,您需要将您的委托设置为weak.

于 2013-05-03T15:40:14.253 回答