Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch Can';不要在不碰撞的情况下释放物体_Cocoa Touch_Uitableview_Iphone Sdk 3.0_Uiviewcontroller - Fatal编程技术网

Cocoa touch Can';不要在不碰撞的情况下释放物体

Cocoa touch Can';不要在不碰撞的情况下释放物体,cocoa-touch,uitableview,iphone-sdk-3.0,uiviewcontroller,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

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

MapViewController *mapView = [[MapViewController alloc] initWithCoordinates:city.Latitude longitude:city.Longitude];
[cell addSubview:mapView.view];
//[mapView release]; -- will crash here
调用最后一行会导致此内存错误EXC\uuuu BAD\u ACCESS”。如何在不崩溃的情况下释放我分配的上述内存

从上面看,单元格是UITableViewCell

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

[self.view addSubview:mapView];

我想你需要重新构建这个。如果没有看到所有的代码,我无法100%确定,但似乎您在使用MapViewController之前就已经将其删除了。是的,您不再显式地使用它,但是您从中拉出的视图几乎肯定不会对其视图控制器保留保留(通常控制器保留视图,而不是相反)。因此,当您释放它时,它将解除分配,现在您刚刚添加的子视图正在引用一个解除分配的对象。您可以通过打开NSZombies来测试这一点


从单元格中删除MapViewController所附着的视图后,需要解除分配MapViewController。您可能应该将UITableViewCell子类化,并使MapViewController成为该类的ivar。然后您可以在cells dealloc例程中释放它。

我认为您需要重新构建它。如果没有看到所有的代码,我无法100%确定,但似乎您在使用MapViewController之前就已经将其删除了。是的,您不再显式地使用它,但是您从中拉出的视图几乎肯定不会对其视图控制器保留保留(通常控制器保留视图,而不是相反)。因此,当您释放它时,它将解除分配,现在您刚刚添加的子视图正在引用一个解除分配的对象。您可以通过打开NSZombies来测试这一点

从单元格中删除MapViewController所附着的视图后,需要解除分配MapViewController。您可能应该将UITableViewCell子类化,并使MapViewController成为该类的ivar。然后您可以在cells dealloc例程中释放它