я должен выпустить NSDate в этом коде ниже? - PullRequest
2 голосов
/ 23 мая 2011

я должен выпустить NSDate в этом коде ниже?

(т. Е. Или это тот случай, когда он создается внутри метода как локальная переменная, и мне не о чем беспокоиться)

Причина, по которой я спрашиваю, заключается в том, что когда я запускаю XCode Profiler и нажимаю на одну из точек, где память подпрыгивает, он выделяет этот бит кода (т.е. первую строку в прикрепленном коде ниже) - т.е. я смотрю на таблица "Блоки утечек" в профилировщике ..

-(NSDate *) dateBySettingHour:(NSInteger)hour andMinute:(NSInteger)minute {

    // Get Calendar for Existing Date
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
    NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: self];

    // Set Hour and Minute
    [components setHour: hour];
    [components setMinute: minute];
    [components setSecond: 00];

    // Create resultant Date
    NSDate *newDate = [gregorian dateFromComponents: components];    // WHERE THE PROFILE HIGHLIGHTS

    // Clean Up
    [gregorian release];    

    return newDate;
}

Ответы [ 2 ]

3 голосов
/ 23 мая 2011

Вам не нужно освобождать объект NSDate, возвращаемый -[NSCalendar dateFromComponents:]. Я предполагаю, что строка была подсвечена, так как это было в последний раз, когда вы ссылались на components (надеюсь, экземпляр NSDateComponents), и вы забыли освободить этот объект.

Ваш код в порядке.Когда я запускаю статический анализатор (а не профилировщик), он не сообщает об ошибках.Я не уверен, почему профилировщик сообщает об утечке - возможно, есть внутренняя утечка в структуре Какао?

2 голосов
/ 23 мая 2011

Нет, вам не нужно выпускать его. Это автоматически выпущено.

...