мне нужно освободить объект NSCalendar в этом примере кода? - PullRequest
0 голосов
/ 19 марта 2011

мне нужно освободить объект 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

Ответы [ 3 ]

4 голосов
/ 19 марта 2011

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

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

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

1 голос
/ 19 марта 2011

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

1 голос
/ 19 марта 2011

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

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

...