私は持っていMKMapViewます。ビューコントローラーが閉じられた後、EXC_BAD_ACCESS.
オンにすると、のデリゲートのNSSZombiesように見えます—私のビューコントローラーです! — サブクラスとサブクラスの両方が解放されているMKMapViewにもかかわらず、呼び出されています。確認しましたが、メモリ管理は正しいです。MKMapViewUIViewController
どうしたの?
私は持っていMKMapViewます。ビューコントローラーが閉じられた後、EXC_BAD_ACCESS.
オンにすると、のデリゲートのNSSZombiesように見えます—私のビューコントローラーです! — サブクラスとサブクラスの両方が解放されているMKMapViewにもかかわらず、呼び出されています。確認しましたが、メモリ管理は正しいです。MKMapViewUIViewController
どうしたの?
これはMKMapView仕組みによるものです。保留中の操作があるため、MapKit は を保持しMKMapViewており、実際にはまだ割り当てが解除されていません。それ自体は問題ではありません。問題は、まだデリゲートにメッセージを送信していることです。
回避策は簡単です。View Controller のクリーンアップの一環として、マップ ビューのデリゲートを に設定しますnil。これによりMKMapView、メッセージが送信されなくなります。
これはMKMapViewDelegate プロトコル リファレンスに記載されています。
デリゲートを設定した MKMapView オブジェクトを解放する前に、そのオブジェクトのデリゲート プロパティを nil に設定することを忘れないでください。これを行うことができる 1 つの場所は、マップ ビューを破棄する dealloc メソッドです。
編集:ここでドキュメントの引用を提供したオスカーにも、すぐ下に賛成票を投じてください。
ARC を考えると、これは、マップ ビューのデリゲートをnilビュー コントローラーの に設定する必要があることを意味することをお勧めしますdealloc。
OK、これは答えの確認です。Apple doc からのものですが、MKMapView にはありません。デリゲート プロトコルのドキュメントでのみ見つかります。
デリゲートを設定した MKMapView オブジェクトを解放する前に、そのオブジェクトのデリゲート プロパティを nil に設定することを忘れないでください。これを行うことができる 1 つの場所は、マップ ビューを破棄する dealloc メソッドです。
注: これは UIWebView にも適用されます。
デリゲートの dealloc メソッドで MapView のデリゲート ポインターを nil に設定したところ、クラッシュは解消されたようです。
マップ ビューのデリゲートを設定してnilもうまくいきませんでした。ただし、showsUserLocation=NOデリゲートの設定は、場所の更新が受信されないようにすることで機能しました。