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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top