Я правильно отпустил объект? - PullRequest
1 голос
/ 07 апреля 2011

Эта проблема меня сильно смутила. selectedDate также является объектом NSDate. если я удалю строку в mark1, этот проект будет работать нормально. если нет, этот проект будет закрыт после того, как я вызову этот метод. в чем проблема? Большое спасибо!

NSDate *selectedData_c = [self.selectedDate dateByAddingTimeInterval:60 * 60 * 8];
self.label = (UILabel *)[nibLoadedCell viewWithTag:1];
label.text = [NSString stringWithFormat:@"%@-%@-%@",[[selectedData_c description] substringWithRange:yearRange],[[selectedData_c description] substringWithRange:monthRange],[[selectedData_c description] substringWithRange:dayRange]];
[selectedData_c release];           // mark1
return cell;

Ответы [ 4 ]

3 голосов
/ 07 апреля 2011

Вам не нужно выпускать его, это autorelease объект. Обычно вы выпускаете только то, что вы alloc редактировали или copy редактировали сами.

1 голос
/ 07 апреля 2011

Нет.«dateByAddingTimeInterval» не содержит слова alloc, copy, retain или mutableCopy.Таким образом, вы не несете ответственности за эту память.Это стандарт именования объективных объектов.

Обратите внимание, что если вы хотите, чтобы эти данные сохранялись после освобождения строки, вам следует скопировать ее;согласно контракту, вы не несете ответственности за эту память, но вы также не гарантируете, что она прослужит за пределами предмета, который дал ее вам.

1 голос
/ 07 апреля 2011
selectedData_c 

не нужно выпускать, поскольку dateByAddingTimeInterval метод вернет объект autorelease.

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

Вы не должны release это, это autorelease 'd. Пожалуйста, прочитайте Правила управления памятью , опубликованные Apple. Они имеют смысл и упрощают управление памятью на платформе iOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...