0

刚刚在 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];
     }
4

1 回答 1

1

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

一种解决方案是向包含 MapView 的视图控制器添加一个 dealloc:

-(void)dealloc
{
    userTrackingBarButtonItem.mapView = nil; // Circular reference bug workaround
}
于 2014-03-25T19:05:10.517 回答