Каковы перспективы управления памятью на этом? - PullRequest
0 голосов
/ 08 октября 2009

Я проверяю объекты Day в моем Словаре расписания и хочу знать, что делать с указателем Day, когда я закончу. Build and Analyze не жалуется на это, но просто сидит и дразнит меня. Я чувствую, что он просто сидит там, когда функция заканчивается, и, возможно, даже каждый раз создается новый цикл. Кроме того, каждый раз, выпуская день через цикл, я освобождаю исходный объект. Есть идеи?

- (NSUInteger) showsInTheNext:(NSUInteger)days {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyyLLdd"];

    if(days == 0) days = 91;
    NSUInteger shows = 0;

    for (NSUInteger x = 0; x < days; x++)
    {
       Day *day = [self.schedule objectForKey:[dateFormatter stringFromDate:[self.date addTimeInterval:60*60*24*x]]];
       if((day != nil) && ([day.type isEqualToString:@"Show"])) shows++;
       //[day release];
    }

    [dateFormatter release];
    return shows;
}

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Вы просто извлекаете экземпляр Day, который уже существует из вашего schedule словаря. Вам не нужно (и не следует) выпускать его, когда вы закончите, если вы не удаляете его из словаря. Нигде в вашем цикле не создается новый экземпляр Day.

1 голос
/ 08 октября 2009

NSDictionary сохраняет подкласс NSObject при добавлении в NSDictionary. Когда вы извлекаете его обратно, дополнительное сообщение retain не отправляется, поэтому вы должны отказаться от указателя без отправки сообщения release.

Если объект удален из словаря, реализация NSDictionary отправит сообщение release удаляемому объекту.

Вы можете проверить это, выполнив проверки на уровне отладки retainCount, чтобы убедиться, что он не изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...