¿Necesito liberar el objeto nscalendar en este ejemplo de código?
-
27-10-2019 - |
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
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.