0

アプリケーションを ARC にアップグレードしたところですが、デリゲートを持つクラスの処理方法に問題があります。私は iOS 4.0 以降をターゲットにしているので、デリゲート ポインターを格納するために__unsafe_unretainedandを使用しています。@property (unsafe_unretained)

しかし、私が今見つけているのは、ビューコントローラーで作成したサービス (デリゲートを含む) が、そのビューコントローラーを削除した後、ぶらぶらしているということです。その結果、ビューコントローラー (デリゲート) と通信しようとします。の割り当てが解除されました...したがって、ゾンビが有効になっているとエラーが発生します。

ビュー コントローラーまたはサービスのコードを更新して、ビュー コントローラーが削除された (ナビゲーション コントローラー スタックからポップされた) ときに、デリゲート ポインターを持つサービスもメモリから削除されるようにするにはどうすればよいですか?

4

1 に答える 1

0

悪いことをしているのは私ではないことがわかりました...

MKMapViewDelegate問題の NSZombie は、所属するビュー コントローラーの割り当てが解除された後も「mapView:didUpdateUserLocation:」を送信し続けるが原因であることが判明しました。知っている。

ビュー コントローラーの [戻る] ボタンをインターセプトして解決し、ポップする前にデリゲートを nil に設定しました。

- (void)backButtonTapped
{
    self.mapView.delegate = nil;
    [self.navigationController popViewControllerAnimated:YES];
}

割り当てが解除された後、MapKit がデリゲートを保持する理由がわかりません。知っている方がいれば、詳しく教えていただけると幸いです。

于 2012-07-13T12:58:38.107 に答える