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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top