2010-07-29 2 views
0
NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[[NSDate alloc] init]]; 

, когда я использую [components release];освобождения памяти с Alloc

он разбивает мое заявление, как я выпускать компоненты

когда я бег с инструментом утечки - мои сбои приложений, когда он достигает использование общего Alloc 22MB

ответ

2

Метод NSCalendar components:fromDate: возвращает автореализованный объект; вы не должны называть его release (если только вы не вызвали сначала retain).

Отъезд Memory Management Rules

3

Вы не должны освободить components себя на всех, как это установлено в autorelease от NSCalendar объекта.

Я подозреваю, что ваша утечка исходит от вашего объекта NSDate, который вы передаете этой строке кода. Вы, вероятно, следует назначить, что для локальной переменной, передать его методу [cal components] затем отпустить локальную переменную:

NSDate *today = [[NSDate alloc] init]; 
NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
             fromDate:today]; 
[today release]; 

Или установить NSDate сам объект в autorelease, как вы передаете его, как вы делаете, использование [NSDate date], который, как Дэвид Gelhar прокомментировал сгенерирует autoreleased объект, например, так:

NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
             fromDate:[NSDate date]]; 
+2

Совершенно верно; '[NSDate alloc]' вызывает утечку. Обратите внимание, что вместо того, чтобы использовать temp и освобождая его, вы также можете просто использовать '[NSDate date]' для получения объекта с автореализацией 'NSDate'. –

Смежные вопросы