Pregunta

¿Necesito liberar el objeto nscalendar en este ejemplo de código? ¿O esto impactará en el hecho de que la última línea de código es devolver a Newdate que se deriva de la variable "gregoriana"?

#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
¿Fue útil?

Solución

Lanzar allí está bien newDate se devuelve con un autorelease Entonces se quedará hasta un NSAutoreleasePool está drenado. Si newDate Requiere una referencia a la instancia del calendario, manejará el recuento de retención internamente.

Otros consejos

Sí, liberaste.

Su variable de componentes retendrá lo que necesita. Dado que se toma posesión al asignar nscalendar, usted es responsable de liberarlo.

PD: Es muy extraño tener un valor de retorno para un método llamado SET. Recomendaría refactorizar para evitar mucha confusión más adelante.

El objeto que lo asignó también debe liberarlo, a menos que se use Autorelease.

La autorelase no se usa en este ejemplo, por lo que debe lanzarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top