このコードの例でnscalendarオブジェクトをリリースする必要がありますか?

StackOverflow https://stackoverflow.com/questions/5359199

質問

このコードの例でnscalendarオブジェクトをリリースする必要がありますか?または、これは、コードの最後の行が「グレゴリオ」変数から派生したニューデートを返すことであるという事実に影響を与えますか?

#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
役に立ちましたか?

解決

そこにリリースすることは問題ありません、 newDate で返されます autorelease したがって、それはanまで固執します NSAutoreleasePool 排水されています。もしも newDate 内部的に保持数を処理するカレンダーインスタンスへの参照が必要です。

他のヒント

はい、あなたはリリースします。

コンポーネント変数は、必要なものを保持します。 Alloc's Nscalendarの所有権を取得するので、あなたはそれをリリースする責任があります。

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

AutorEleaseが使用されない限り、それを配分するオブジェクトもそれをリリースする必要があります。

この例ではAutorEleaseは使用されていないため、実際にリリースする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top