刚刚遇到MapKit中的一个错误,想看看社区正在经历什么。将MKUserTrackingBarButtonItem添加到UIToolBar时,我看到当切换到另一个viewController时,地图没有从内存释放(虽然我看到dealloc正在触发)。
有人能证实他们看到了这种行为吗?如果我不添加MKUserTrackingBarButtonItem,我的测试会显示地图正确发布。使用iOS7,使用Instruments / Leaks进行测试。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
MKUserTrackingBarButtonItem *userTrackingBarButtonItem = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self.mapView];
[userTrackingBarButtonItem setAction:@selector(track:)];
UIBarButtonItem *flexibleSpaceBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[self setToolbarItems:[NSArray arrayWithObjects:flexibleSpaceBarButton, userTrackingBarButtonItem, flexibleSpaceBarButton, nil] animated:YES];
[self.navigationController setToolbarHidden:NO animated:NO];
}
答案 0 :(得分:1)
MKUserTrackingBarButtonItem和MKMapView各自保持对彼此的强引用,从而产生循环保留。这似乎是MapKit本身的一个错误,它仍然存在于iOS 7.1中。
解决方案是将dealloc添加到包含MapView的视图控制器:
-(void)dealloc
{
userTrackingBarButtonItem.mapView = nil; // Circular reference bug workaround
}