我必须在下面的代码中发布NSDate吗?

时间:2011-05-23 03:14:45

标签: iphone memory-management memory-leaks profiling nsdate

我是否必须在下面的代码中发布NSDate?

(即,它是在一个方法中创建的一个局部变量,我不必担心)

我问的原因是当我运行XCode Profiler并点击其中一个内存跳跃的点时,它突出显示了这段代码(即下面附加代码中的第一行) - 即我正在查看分析器中的“泄漏块”表..

-(NSDate *) dateBySettingHour:(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];    // WHERE THE PROFILE HIGHLIGHTS

    // Clean Up
    [gregorian release];    

    return newDate;
}

2 个答案:

答案 0 :(得分:3)

您不必释放NSDate返回的-[NSCalendar dateFromComponents:]对象。 我的猜测是该行突出显示,因为它是您最后一次引用componentsNSDateComponents的实例,希望如此)并且您忘记发布那个对象

你的代码很好。当我运行静态分析器(而不是分析器)时,它报告没有错误。我不确定为什么分析器会报告泄漏 - 也许Cocoa框架中存在内部泄漏?

答案 1 :(得分:2)

不,你不必释放它。它是自动释放的。