我在我的应用程序中使用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];
}
答案 0 :(得分:4)
您的内存泄漏是+ (int) currentDayOfWeek
方法,因为您创建了逻辑日历的另一个副本。尝试使用现有日历而不是创建新日历。
答案 1 :(得分: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;
}