Objective c 调用委托方法,无法识别选择器,因为发送到错误的对象

Objective c 调用委托方法,无法识别选择器,因为发送到错误的对象,objective-c,ios,memory,Objective C,Ios,Memory,在我的应用程序中,我进行了大量的网络加载。我的数据模型由“Loader”对象组成,这些对象执行此加载,并在完成/失败时调用其委托。所有学员都遵守“LoaderDelegate”协议 我遇到的问题是,有时看似随机的对象,而不是委托,正在获取委托消息。这当然会由于无法识别的选择器而导致崩溃 只有一组崩溃日志告诉我哪一个加载程序有问题,其他加载程序没有该信息,只有获取消息的随机对象 我被困在如何确定这个问题的真正原因 一组崩溃日志中有一个加载程序试图调用它的委托,但到达了\u UIImageViewE

在我的应用程序中,我进行了大量的网络加载。我的数据模型由“Loader”对象组成,这些对象执行此加载,并在完成/失败时调用其委托。所有学员都遵守“LoaderDelegate”协议

我遇到的问题是,有时看似随机的对象,而不是委托,正在获取委托消息。这当然会由于无法识别的选择器而导致崩溃

只有一组崩溃日志告诉我哪一个加载程序有问题,其他加载程序没有该信息,只有获取消息的随机对象

我被困在如何确定这个问题的真正原因

一组崩溃日志中有一个加载程序试图调用它的委托,但到达了
\u UIImageViewExtendedStorage
。另一个has加载程序正在到达
\uu NSCFInputStream
。另一个
\uu NSBlockVariable\uu
。还有另一个,
CALayer

这是我3天前的最新测试版

如果每次都是同一个物体,那是一回事,但看起来几乎是随机的。有没有可能是因为某种原因,记忆被一个新的对象改写了


我所有加载程序的“我的委托”属性都是assign属性,但加载程序完成时委托始终处于活动状态(委托是调用加载程序的我的视图控制器)。

请发布一些代码,因为很难排除故障。记住在dealloc中取消您的代理

- (void) dealloc {
  objectOfWhichIAmTheDelegate.delegate = nil;
}
更重要的是,委托应该是一个assign属性,而不是retain-但在您的情况下,这不是一个问题

@property (assign) id<TheMightyDelegate> delegate;

希望这能对你的问题有所帮助。如果没有,请提供一些代码。

事实证明,我在所有地方都随机地遇到了这个错误,只是不在这个特定的类中,也不只是在委托方法中


在我的例子中,问题是我在多个线程中访问各种类的属性,而这些属性是非原子的。自从我修复了它(删除了属性的非原子属性),我就再也并没有看到这种情况发生

我正在使用assign,请参见问题的最后一句。;)我目前没有在dealoc中将delegate设置为nil,所以我将尝试这样做。虽然我不确定这会导致问题的原因,因为加载程序只有在其nsurlconnection完成并调用其委托后才能释放。另外,我知道在
respondsToSelector
中包装所有委托调用将停止崩溃,但我想找出问题的根本原因。我不明白为什么委托属性总是指向错误的位置。发布所有内容的代码太多了,但为了让您了解结构,我所有的加载程序都是从加载程序超类中派生出来的。所有加载程序的委托属性实际上都在超类中。这可能是问题的一部分吗?作为代理的对象需要
nil
另一个对象的
delegate
出口;第一个代码段错误地指出对象应该
nil
它自己的
delegate
outlet@爱因斯坦2
if ([delegate respondsToSelector:@selector(yourMethod)]) {
[delegate performSelector:@selector(yourMethod)];
}