Утечка памяти с датой (__NSCFCalendar, icu :: GregorianCalendar) - PullRequest
0 голосов
/ 01 апреля 2011

У меня небольшой метод, возвращающий первый день недели с указанной датой:

- (NSDate*) getFirstDayOfTheWeekFor:(NSDate*)date {

NSCalendar *gregorianCalender = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDayDate; //This is 100.0% leaking acc. to the Performance Tool Leaks

unsigned yearAndWeek = NSYearCalendarUnit | NSWeekCalendarUnit;

// retrieve the components from the current date
NSDateComponents *compsCurrentDate = [[gregorianCalender components:yearAndWeek fromDate:date] autorelease];

[compsCurrentDate setWeekday:2]; // Monday
[compsCurrentDate setHour:0];
[compsCurrentDate setMinute:0];
[compsCurrentDate setSecond:0];

// make a date from the modfied components
firstDayDate = [[gregorianCalender dateFromComponents:compsCurrentDate] autorelease];   

return firstDayDate;
}

Как видите, я уже пытаюсь автоматически выпустить каждую переменную, которая здесь используется (это не то, на что это было похоже, прежде чем я начал отслеживать утечки). Первоначально я хотел явно освободить все переменные перед возвратом, кроме переменной firstDayDate, которая ДОЛЖНА быть автоматически освобождена из-за возврата.

Это утечки объектов, найденные с помощью Performance Tool:

  • icu :: GregorianCalendar (1,00 КБ)
  • icu :: SimpleTimeZone (112 байт)
  • __ NSDate (16 байт)
  • icu :: NSNumberingSystem (128 байт)
  • __ NSCFCalendar (48 байт)

Ошибка ДОЛЖНА быть чем-то совершенно глупым, но я не могу ее найти. Вы можете мне помочь? СПАСИБО !!

1 Ответ

0 голосов
/ 01 апреля 2011

Это должно выглядеть следующим образом:

- (NSDate*) getFirstDayOfTheWeekFor:(NSDate*)date
{
    NSCalendar *gregorianCalender = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    NSDate *firstDayDate; //This is 100.0% leaking acc. to the Performance Tool Leaks

    unsigned yearAndWeek = NSYearCalendarUnit | NSWeekCalendarUnit;

    // retrieve the components from the current date
    NSDateComponents *compsCurrentDate = [gregorianCalender components:yearAndWeek fromDate:date];

    [compsCurrentDate setWeekday:2]; // Monday
    [compsCurrentDate setHour:0];
    [compsCurrentDate setMinute:0];
    [compsCurrentDate setSecond:0];

    // make a date from the modfied components
    firstDayDate = [gregorianCalender dateFromComponents:compsCurrentDate];

    return firstDayDate;
}

Если firstDayDate утечка, это не в этом методе.Проверьте вниз по течению.Кроме того, ICU часть выглядит немного подозрительно для меня.Это может быть ошибка / утечка в оболочке iOS вокруг библиотеки icu.

Помните, что вы только release или autorelease, если вы alloc, init или copy.

...