Я столкнулся с серьезными утечками памяти в одном из моих приложений, которые я строю. У меня есть UINavigatonController, который находится внутри UITabBarview. Внутри NavView есть представление MKMap. Когда вы нажимаете дополнительную кнопку в выноске, загружается подробный вид. В этом подробном представлении я пытаюсь заполнить таблицу из списка, используя цикл for (объект в массиве). Плист является массивом словарей. Я использую словари, чтобы найти один с ключом, который является названием выноски, а затем получить массив из этого словаря. В симуляторе все работает нормально, но я получаю огромные утечки памяти, делая это так, как я. Есть идеи, что происходит?
- (void)viewDidLoad {
self.title = @"Route Details";
NSString *path = [[NSBundle mainBundle] pathForResource:@"stopLocation" ofType:@"plist"];
holderArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
[self getRouteArray];
routeDetails.delegate = self;
routeDetails.dataSource = self;
}
-(void)getRouteArray{
for (NSMutableDictionary *dictionary in holderArray) {
//NSString *stopName = [dictionary objectForKey:@"StopName"];
//NSString *stopName = [[NSString alloc] initWithString:[dictionary objectForKey:@"StopName"]];
BOOL testString = [currentRoute isEqualToString:[dictionary objectForKey:@"StopName"]];
if (testString) {
routeArray = [[NSMutableArray alloc] initWithArray:[dictionary objectForKey:@"RouteService"]];
}
}
}
- (void)dealloc {
[routeArray release];
[routeDetails release];
[super dealloc];
}
holderArray - это ивар и массив маршрутов. Как вы можете видеть, я пробовал несколько способов размещения nstrings и массивов, но все они дают одинаковые утечки. Согласно инструменту производительности, я просочился из NSCFString, NSCFDictionary и NSCFArry. Я выпустил routeArray в dealloc, и он работает нормально, но если я отпускаю holderArray, он вылетает всякий раз, когда я возвращаюсь к своей карте из подробного вида. Полагаю, я просто не уверен, что делать со строками и словарем, используемыми в цикле for.
Просто для добавления подробного вида создается так:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
NSString *selectedRouteName = [NSString stringWithFormat:@"%@",view.annotation.title];
RouteDetailView *rdc = [[RouteDetailView alloc] initWithNibName:@"RouteDetailView" bundle:nil];
[rdc setCurrentRoute:selectedRouteName];
[self.navigationController pushViewController:rdc animated:YES];
[rdc release];
}
Извините, если что-либо из перечисленного неясно. Дайте мне знать, и я могу попытаться перефразировать его.