1

をクラッシュすることなく、オブジェクトを解放することはできません、私は次の操作を行いますは、テーブルビューのcellForRowAtIndexPathで

MapViewController *mapView = [[MapViewController alloc] initWithCoordinates:city.Latitude longitude:city.Longitude]; 
[cell addSubview:mapView.view]; 
//[mapView release]; -- will crash here 

は、最後の行は「このメモリエラーEXC__BAD _ACCESSを与えて呼び出します。上記のメモリを解放するにはどうすればいいですか?

上記から、セルはUITableViewCellです。

MapViewControllerは、MKReverseGeocoderDelegateとMKMapViewDelegateを実装するUIViewControllerです。 MapViewControllerのinitでは、MKMapViewを割り当てます。コントローラののviewDidLoadで、それはのUIViewControllerのビューにのMapViewを追加します。

[self.view addSubview:mapView]; 

答えて

1

私はあなたがこれを再設計する必要があるとしていると思います。すべてのコードを見ることなく、私は100%確信することはできませんが、それを済ませる前にMapViewControllerを取り除いているようです。はい、あなたはもはや明示的にそれを使用していませんが、あなたがそれから取り出したビューは、ほぼそのView Controller(一般的にコントローラはビ​​ューを保持しています。だからあなたがそれを解放すると、deallocsと今あなたが追加したサブビューは、解放されたオブジェクトを参照しています。 NSZombiesを有効にすることでこれをテストできます。

添付されているビューがセルから削除された後、MapViewControllerの割り当てを解除する必要があります。おそらく、UITableViewCellをサブクラス化し、MapViewControllerをそのクラスのivarにする必要があります。次に、セルのdeallocルーチン中に解放することができます。

関連する問題