1

在 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 是一个 UIViewController,它实现了 MKReverseGeocoderDelegate 和 MKMapViewDelegate。在 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 回答