2009-07-06 79 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例程中释放它。