Muss ich das NSCalendar -Objekt in diesem Code -Beispiel veröffentlichen?
-
27-10-2019 - |
Frage
Muss ich das NSCalendar -Objekt in diesem Code -Beispiel veröffentlichen? Oder wird sich dies auf die Tatsache auswirken, dass die letzte Codezeile darin besteht, ein Neudatum zurückzugeben, der von der Variablen "Gregorianer" abgeleitet wird?
#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
Lösung
Dort zu veröffentlichen, ist in Ordnung, newDate
wird mit einem zurückgegeben autorelease
so bleibt es bis ein NSAutoreleasePool
ist entwässert. Wenn newDate
Erfordert einen Hinweis auf die Kalenderinstanz, die die Zahlung intern behandelt.
Andere Tipps
Ja, Sie veröffentlichen.
Ihre Komponentenvariablen behalten das, was sie benötigt. Da Sie NSCalendar zu Alloc'ing übernehmen, sind Sie für die Veröffentlichung verantwortlich.
PS: Es ist sehr seltsam, einen Rückgabewert für eine Methode namens Set zu haben. Ich würde empfehlen, um Refactoring zu reportieren, um später viel Verwirrung zu vermeiden.
Das Objekt, das es generiert hat, sollte es auch freigeben, es sei denn, Autorelease wird verwendet.
Autorelease wird in diesem Beispiel nicht verwendet, daher müssen Sie es tatsächlich freigeben.