#iphone #objective-c #ios #memory-leaks
#iPhone #objective-c #iOS #утечки памяти
Вопрос:
Я использую 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];
}
Комментарии:
1. У
CFCalendarCopyCurrent()
вас там два, один в вашем методе класса, вероятно, является кандидатом, поскольку он не выпущен.2. я перехожу по этой ссылке Класс pastebin.com/XiYkKfC2
Ответ №1:
Ваша утечка памяти связана с (int) currentDayOfWeek
методом, потому что вы создаете другую копию логического календаря. Попробуйте использовать существующий календарь вместо создания нового.
Ответ №2:
Это работает для меня во всех методах этого контроллера
Нужно только освободить текущий календарь, прежде чем возвращать индекс.
(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;
}