Я новичок в cocoa / objective-c, и я борюсь с выпускает мои объекты. У меня есть следующий код:
gastroCategoryList = [[NSMutableArray alloc] init];
for (NSDictionary *gastrocategory in gastrocategories) {
NSString *oid = [gastrocategory objectForKey:@"id"];
GastroCategory *gc = [[GastroCategory alloc] initWithId:[oid intValue] name:[gastrocategory objectForKey:@"name"]];
[gastroCategoryList addObject:gc];
}
Анализатор показывает мне, что "gastrocategory", определенная в for, является потенциальной утечкой памяти. Но я не уверен, смогу ли я выпустить это в конце for loop?
Также в следующем коде:
- (NSArray *)eventsForStage:(int)stageId {
NSMutableArray *result = [[NSMutableArray alloc] init];
for (Event *e in eventList) {
if ([e stageId] == stageId) {
[result addObject:e];
}
}
return result;
}
Анализатор сообщает мне, что мой «результат» - это потенциальная утечка. Но где мне его выпустить?
Есть ли еще простое правило, которое нужно запомнить, когда я должен использовать назначать, копировать, сохранять и т. д. в @property?
Другая проблема:
- (IBAction)showHungryView:(id)sender {
GastroCategoriesView *gastroCategoriesView = [[GastroCategoriesView alloc] initWithNibName:@"GastroCategoriesView" bundle:nil];
[gastroCategoriesView setDataManager:dataManager];
UIView *currentView = [self view];
UIView *window = [currentView superview];
UIView *gastroView = [gastroCategoriesView view];
[window addSubview:gastroView];
CGRect pageFrame = currentView.frame;
CGFloat pageWidth = pageFrame.size.width;
gastroView.frame = CGRectOffset(pageFrame,pageWidth,0);
[UIView beginAnimations:nil context:NULL];
currentView.frame = CGRectOffset(pageFrame,-pageWidth,0);
gastroView.frame = pageFrame;
[UIView commitAnimations];
//[gastroCategoriesView release];
}
Я не понимаю, "gastroCategoriesView" - потенциальная утечка. Я пытался освободить его в конце или с помощью автозапуска, но ни один работает нормально. Каждый раз, когда я вызываю метод, мое приложение завершает работу. Еще раз большое спасибо!