我有一个将委托消息发送到另一个类的类。 如果其他类没有收听,则应用程序崩溃。 我正在寻找一种方法来检查在发送消息之前其他类是否正在侦听。
所以在发布委托的类中,我有这个条件检查:
if ([self.delegate respondsToSelector:@selector(NewDataFromSocketWithString:WithCommand:)])
[self.delegate NewDataFromSocketWithString:final WithCommand:c];
在某种程度上,条件总是正确的,即使获得委托的类已经释放并且不再存在。
如何在发布前检查代表以消除崩溃?
答案 0 :(得分:5)
即使获得委托的类已经发布并且不再存在。
...你测试过这种情况吗?如果你引用你的代表并不弱,那么这将不会发生。如果委托实际上已被释放,则self.delegate
应返回nil
,这意味着您的if语句将评估为false。
您的if语句评估为true的事实告诉我您的委托仍然设置。您使用ARC还是手动管理内存?如果是后者,则您希望将您的媒体资源设置为assign
- 如果是前者,则您希望将您的代理设置为{{1 }}