MKUserTrackingBarButtonItem不释放mapViewController

时间:2013-11-06 17:23:22

标签: memory-leaks mapkit

刚刚遇到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];
     }

1 个答案:

答案 0 :(得分:1)

MKUserTrackingBarButtonItem和MKMapView各自保持对彼此的强引用,从而产生循环保留。这似乎是MapKit本身的一个错误,它仍然存在于iOS 7.1中。

解决方案是将dealloc添加到包含MapView的视图控制器:

-(void)dealloc
{
    userTrackingBarButtonItem.mapView = nil; // Circular reference bug workaround
}