AにはViewControllerがあり、(デリゲートとして)ViewControllerへの参照を持つ「ダウンローダー」オブジェクトを作成します。ダウンローダーは、アイテムのダウンロードに成功すると、ViewControllerをコールバックします。ビューにとどまっている限り、これは正常に機能しますが、ダウンロードが完了する前に移動すると、が表示されますEXC_BAD_ACCESS
。これが発生している理由は理解できますが、オブジェクトがまだ割り当てられているかどうかを確認する方法はありますか?delegate != nil
、、を使用してテストしようとしまし[delegate respondsToSelector:]
たが、窒息します。
if (!self.delegate || ![self.delegate respondsToSelector:@selector(downloadComplete:)]) {
// delegate is gone, go away quietly
[self autorelease];
return;
}
else {
// delegate is still around
[self.delegate downloadComplete:result];
}
私はできることを知っています、
a)ダウンローダーオブジェクトにViewControllerを保持させる
b)View Controllerにダウンローダーの配列を保持し、ViewControllerの割り当てを解除するときにデリゲート値をnilに設定します。
しかし、デリゲートアドレスに有効なオブジェクトが含まれているかどうかをテストする、もっと簡単な方法があるのではないかと思います。