Нужно ли выпустить объект NSCALENDAR в этом примере кода?

StackOverflow https://stackoverflow.com/questions/5359199

Вопрос

Нужно ли выпустить объект NSCALENDAR в этом примере кода? Или это повлияет на тот факт, что последняя строка кода состоит в том, чтобы вернуть Newdate, которая получена из «григорианской» переменной?

#import "NSDateHelper.h"


@implementation NSDate(NSDateHelper)

-(NSDate *) setHour:(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];

    // Clean Up
    [gregorian release];    // TODO:  Do I release this here, or will it affect the return value not being valid?

    return newDate;
}

@end
Это было полезно?

Решение

Выпуск там хорошо, newDate возвращается с autorelease так что он будет оставаться NSAutoreleasePool осушается. Если newDate Требуется ссылка на экземпляр календаря, он будет обрабатывать количество удержаний внутри.

Другие советы

Да, вы выпускаете.

Ваша переменная компонентов сохранит то, что ей нужно. Поскольку вы берете на себя ответственность, выдвигая NSCAlendar, вы несете ответственность за его выпуск.

PS: очень странно иметь возвратное значение для метода с именем набора. Я бы порекомендовал рефакторинг, чтобы не путануть в дальнейшем.

Объект, который выдвигает его тоже, если он не используется, если не используется AutorElease.

AutorElease не используется в этом примере, поэтому вы действительно должны его выпустить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top