2009-07-06 85 views
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]; 

回答

1

我想你會需要重新構建這個。沒有看到所有的代碼,我不能100%確定,但似乎你在完成之前擺脫了MapViewController。是的,你不再明確地使用它,但是你從視圖控制器中取出的視圖幾乎肯定不會保留視圖控制器(通常控制器保留視圖,而不是相反)。所以當你釋放它時,它會釋放,現在你剛添加的子視圖引用一個釋放對象。你可以通過打開NSZombies來測試。

您需要在連接到視圖後取消分配MapViewController從單元格中移除。您應該繼承UITableViewCell的子類並使MapViewController成爲該類的一個ivar。然後你可以在單元dealloc例程中釋放它。