NSDateComponents / утечка NSCalendar - PullRequest
2 голосов
/ 12 марта 2011

Если я проанализирую свою программу с помощью инструмента XCode 4, следующая строка приведет к «Потенциальной утечке объекта, расположенного в строке 127».

NSDateComponents *weekdayComponents = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] components:NSWeekdayCalendarUnit fromDate:[[NSDate date] dateByAddingTimeInterval:(60*60*24)]];

если я пытаюсь освободить его ([weekdayComponents release];), появляется предупреждение «Неправильное уменьшение счетчика ссылок на объект, который в данный момент не принадлежит вызывающей стороне». Есть идеи? Заранее спасибо!

1 Ответ

1 голос
/ 12 марта 2011

Проблема в вашем коде в том, что вы не цепляетесь за объект NSCalendar, поэтому вы больше не можете его освобождать.

Другими словами, вы пропускаете объект NSCalendar. Если вы настаиваете, чтобы все было в одном утверждении, вы должны изменить его на:

NSDateComponents *weekdayComponents = 
    [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]                 
    components:NSWeekdayCalendarUnit 
    fromDate:[[NSDate date] dateByAddingTimeInterval:(60*60*24)]
    ];

Еще лучше разделить утверждение:

NSCalendar *calendar = 
    [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *weekdayComponents =
    [calendar  
         components:NSWeekdayCalendarUnit 
           fromDate:[[NSDate date] dateByAddingTimeInterval:(60*60*24)]
    ];

[calendar release];
...