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 で、mapview を UIViewController のビューに追加します。

[self.view addSubview:mapView];
4

1 に答える 1

1

これを再設計する必要があると思います。すべてのコードを確認しないと 100% 確信が持てませんが、MapViewController を使い切る前に削除しているようです。はい、もう明示的に使用していませんが、それから引き出したビューは、ほとんどの場合、そのビュー コントローラーに対して保持を保持していません (通常、コントローラーはビューを保持しますが、その逆ではありません)。したがって、解放すると割り当てが解除され、追加したばかりのサブビューが割り当て解除されたオブジェクトを参照しています。これは、NSZombies をオンにすることでテストできます。

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

于 2009-07-06T23:17:10.437 に答える