0

我需要在此代码示例中释放 NSCalendar 对象吗?或者这是否会影响最后一行代码返回从“gregorian”变量派生的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

是的,你释放。

您的 components 变量将保留它需要的内容。由于您通过分配 NSCalendar 获得所有权,因此您有责任释放它。

ps:一个名为set的方法有返回值是很奇怪的。我建议重构以避免以后出现很多混乱。

于 2011-03-19T00:44:39.967 回答
1

分配它的对象也应该释放它,除非使用自动释放。

此示例中没有使用 Autorelease,因此您必须确实释放它。

于 2011-03-19T00:44:42.513 回答
1

放在那里没问题,newDate用 an 返回,autorelease所以它会一直停留直到 anNSAutoreleasePool被耗尽。如果newDate需要对日历实例的引用,它将在内部处理保留计数。

于 2011-03-19T00:47:18.127 回答