У меня есть контроллер навигации, в котором VC1 помещает VC2 в стек навигации. VC2 имеет MKMapView в представлении на основе вкладок с включенным местоположением пользователя. Когда я проверяю повторное выделение с помощью инструментов, используя инструмент Heapshot Analysis, я неоднократно обнаруживаю, что некоторые объекты MKUserLocation не освобождаются, когда я возвращаюсь в VC1.
Я удалил все аннотации, а также отключил местоположение пользователя при разлочке. Что может быть причиной такого роста кучи?
Код VC1, который помещает VC2 в стек навигации:
- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
VC2 *vc2 = [[VC2 alloc] init];
vc2.index = indexPath.row;
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[self navigationController] pushViewController:vc2
animated:YES];
[vc2 release];
vc2 = nil;
return nil;
}
Код деаллока в VC2:
- (void)dealloc {
//Other UILabel, UITextField objects dealloc methods go here
//The next four lines of code do not make a difference even if they are in viewWillDisappear
[self.mapView removeAnnotations:self.mapView.annotations];
[self.mapView.layer removeAllAnimations];
self.mapView.showsUserLocation = NO;//This line does not make a difference in heapshot
mapView.delegate = nil;
[mapView release];
mapView = nil;
[super dealloc];
}
Также, если я не включаю местоположение пользователя, рост кучи не происходит.
Обновление: Я проверил это на симуляторе и на iPad 3G + WiFi, и я нахожу этот рост кучи в обоих случаях.