Devo rilasciare l'oggetto Nscalendar in questo esempio di codice?
-
27-10-2019 - |
Domanda
Devo rilasciare l'oggetto Nscalendar in questo esempio di codice? O questo impatto sul fatto che l'ultima riga di codice è di restituire Newdate che deriva dalla variabile "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
Soluzione
Rilasciando c'è bene, newDate
viene restituito con un autorelease
Quindi rimarrà in giro fino a un NSAutoreleasePool
è drenato. Se newDate
Richiede un riferimento all'istanza del calendario che gestirà il conteggio di mantenimento internamente.
Altri suggerimenti
Sì, rilascio.
La variabile dei tuoi componenti manterrà ciò di cui ha bisogno. Dato che prendi la proprietà assegnando Nscalendar, sei responsabile del rilasciarlo.
PS: è molto strano avere un valore di ritorno per un metodo chiamato set. Consiglierei di refactoring per evitare molta confusione in seguito.
L'oggetto che lo ha assegnato dovrebbe rilasciarlo anche, a meno che non venga utilizzato l'autorelease.
L'autorelease non viene utilizzato in questo esempio, quindi devi effettivamente rilasciarlo.