无法在不崩溃的情况下释放对象

时间:2009-07-06 23:01:03

标签: cocoa-touch uitableview iphone-sdk-3.0 uiviewcontroller

在tableview cellForRowAtIndexPath中,我执行以下操作:

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

调用最后一行会出现此内存错误EXC__BAD _ACCESS“。如何在没有崩溃的情况下释放我分配的上述内存?

从上面看,cell是一个UITableViewCell。

MapViewController是一个实现MKReverseGeocoderDelegate和MKMapViewDelegate的UIViewController。在MapViewController的init中,它分配了一个MKMapView。在控制器的viewDidLoad中,它将mapview添加到UIViewController的视图中:

[self.view addSubview:mapView];

1 个答案:

答案 0 :(得分:1)

我认为你需要重新架构这个。没有看到所有的代码我不能100%肯定,但似乎你在完成它之前摆脱了MapViewController。是的,您不再明确地使用它,但是您从中取出的视图几乎肯定没有对其视图控制器保留(通常控制器保留视图,而不是相反)。因此,当您释放它时,它会释放,现在您刚刚添加的子视图引用了一个解除分配的对象。你可以通过打开NSZombies来测试这个。

您需要在将附加到的视图从单元格中删除后释放MapViewController。您可能应该继承UITableViewCell并使MapViewController成为该类的ivar。然后你可以在细胞dealloc例程中释放它。