ai-je besoin de libérer l'objet NSCalendar dans cet exemple de code?
-
27-10-2019 - |
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
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.