Как освободить объект в цикле forin?

Я новичок в 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" - потенциальная утечка. Я пытался освободить его в конце или с помощью автозапуска, но ни один работает нормально. Каждый раз, когда я вызываю метод, мое приложение завершает работу. Еще раз большое спасибо!

7
задан n3on 24 March 2011 в 21:38
поделиться