このコードの例でnscalendarオブジェクトをリリースする必要がありますか?
-
27-10-2019 - |
質問
このコードの例で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は使用されていないため、実際にリリースする必要があります。
所属していません StackOverflow