【问题标题】:How to release these leaks?如何释放这些泄漏?
【发布时间】:2011-12-10 16:47:32
【问题描述】:

我在我的应用程序中使用THCalendarInfo 类。在这堂课中,我遇到了内存泄漏,但实际上泄漏显示在这一行CFCalendarCopyCurrent(),。实际上在dealloc 方法中它被释放了,但它显示了内存泄漏。我发送示例代码。

+ (int) currentDayOfWeek
{
    return CFCalendarGetOrdinalityOfUnit (
        CFCalendarCopyCurrent(),
        kCFCalendarUnitDay,
        kCFCalendarUnitWeek,
    [self currentAbsoluteTime]
    );
}

- (id) init
{
    [super init];
    _absoluteTime = CFAbsoluteTimeGetCurrent();
    _calendar     = CFCalendarCopyCurrent();
    _timeZone     = CFCalendarCopyTimeZone( _calendar );
    _dayNames     = nil;
    _monthNames   = nil;

    [self setupEnglishNames];
    return self;
}

- (void) dealloc
{
    if ( _calendar ) CFRelease( _calendar );
    if ( _timeZone ) CFRelease( _timeZone );

    [_dayNames release];
    [_monthNames release];

    [super dealloc];
}

【问题讨论】:

  • 哪个CFCalendarCopyCurrent(),你有两个,你的类方法中的一个可能是候选者,因为它没有发布。
  • 我关注这个链接 Class pastebin.com/XiYkKfC2

标签: iphone objective-c ios memory-leaks


【解决方案1】:

这适用于这个控制器的所有方法

只需要在返回索引前释放当前日历。

+ (int) currentDayOfWeek
{
    CFCalendarRef currentCalendar = CFCalendarCopyCurrent ();

    CFIndex respuesta = CFCalendarGetOrdinalityOfUnit (
                                           currentCalendar,
                                           kCFCalendarUnitDay,
                                           kCFCalendarUnitWeek,
                                           [self currentAbsoluteTime]
                                           );
    CFRelease(currentCalendar);

    return respuesta;
}

+ (int) daysInCurrentMonth
{
    CFCalendarRef currentCalendar = CFCalendarCopyCurrent ();

    CFRange r = CFCalendarGetRangeOfUnit (
       currentCalendar,
       kCFCalendarUnitDay,
       kCFCalendarUnitMonth,
       [self currentAbsoluteTime]
    );


    CFRelease(currentCalendar);

    return r.length;
}

【讨论】:

    【解决方案2】:

    您的内存泄漏在+ (int) currentDayOfWeek 方法中,因为您创建了逻辑日历的另一个副本。尝试使用现有日历而不是创建新日历。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-08
      • 2011-01-27
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2014-09-19
      • 1970-01-01
      相关资源
      最近更新 更多