7

ナビゲーション バーの [戻る] キーを押して、MapKit (mapView) を持ち、Location Manager を使用したビューをアンロードすると、アプリケーションが「EXC_BAD_ACCESS」でクラッシュするというバグがあります。バグを修正するために何日も試行し、最終的にこの問題に遭遇した人のための修正を思い付きました:

このコードを dealloc に追加します

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}
4

1 に答える 1

0

私もこれを持っていました:)そして、はい、この修正は実際には適切な修正です。

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

舞台裏で何が起こっているかは次のとおりです。

  1. バックキーを押しました。これにより、mapView を保持するコントローラーがアンロードされ、結果として解放されます。コントローラーへの参照が 1 つしかない可能性が非常に高いため、その時点で割り当てが解除されます。

  2. ただし、locationManager は、ジオポジショニングの内部動作のどこかでまだ参照されている可能性が非常に高いです。

  3. locationManager および/または mapView がそれぞれのデリゲートに通知を送信するようになった場合、それらは無効なポインターに従っています。EXC_BAD_ACCESS 例外が発生します。

はい: 自分自身を指すデリゲートを nilling することは常に良い考えです。私はただ、Apple がそこにオートマジックを追加してくれることを望みました。

于 2012-02-18T14:04:04.233 に答える