освобождение памяти с помощью alloc - PullRequest
0 голосов
/ 29 июля 2010
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];

, когда я использую [components release];

, это приводит к сбою моего приложения, как мне выпустить компоненты

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

Ответы [ 2 ]

3 голосов
/ 29 июля 2010

Вы вообще не должны выпускать components, поскольку для него установлен автоматический выпуск объекта NSCalendar.

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

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

Или, установить сам объект NSDate на автоматическое высвобождение при передаче его, как вы делаете, использовать [NSDate date], который, как прокомментировал Дэвид Гелхар, сгенерирует объект автоматического освобождения, например: *

NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                      fromDate:[NSDate date]];
2 голосов
/ 29 июля 2010

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

Ознакомьтесь с Правилами управления памятью

...