0

このコード例で NSCalendar オブジェクトを解放する必要はありますか? それとも、コードの最後の行が「グレゴリアン」変数から派生した newDate を返すという事実に影響しますか?

#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
4

3 に答える 3

4

はい、解放します。

コンポーネント変数は、必要なものを保持します。NSCalendar を割り当てることで所有権を取得するため、それを解放する責任があります。

ps: set という名前のメソッドの戻り値を持つことは非常に奇妙です。後で多くの混乱を避けるために、リファクタリングをお勧めします。

于 2011-03-19T00:44:39.967 に答える
1

自動解放が使用されない限り、それを割り当てたオブジェクトもそれを解放する必要があります。

この例では自動解放は使用されていないため、実際に解放する必要があります。

于 2011-03-19T00:44:42.513 に答える
1

そこを解放すれば結構newDateです。カレンダー インスタンスへの参照が必要な場合は、保持カウントを内部で処理します。autoreleaseNSAutoreleasePoolnewDate

于 2011-03-19T00:47:18.127 に答える