Question

dois-je libérer l'objet NSCalendar dans cet exemple de code? Ou cela influera sur le fait que la dernière ligne de code est de retour newDate qui est dérivé de la variable « grégorienne »?

#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
Était-ce utile?

La solution

Libérer il est très bien, newDate est retourné avec un autorelease il collera autour jusqu'à ce qu'un NSAutoreleasePool est drainée. Si newDate nécessite une référence à l'instance civile, il se chargera Retain compte en interne.

Autres conseils

Oui, vous relâchez.

votre variable de composants conservera ce dont il a besoin. Puisque vous prenez possession par alloc'ing NSCalendar, vous êtes responsable de le relâcher.

ps: il est très étrange d'avoir une valeur de retour pour une méthode nommée ensemble. Je recommande refactoring pour éviter beaucoup de confusion plus tard.

L'objet alloc'd il devrait le libérer aussi, à moins autorelease est utilisé.

Autorelease n'est pas utilisé dans cet exemple, vous devez donc bien le libérer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top