dealloc и выпуск выпуска - PullRequest
       2

dealloc и выпуск выпуска

0 голосов
/ 15 сентября 2011

я знаю, что этот вопрос обсуждался много раз, но у меня простой вопрос.Прочитав все правила Apple по управлению памятью, я знаю следующее:

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

ran *me = [[ran alloc] init];
//do somthing
[me release];

так что теперь, счет удержания равен 0, после того, как я освобождаю запущенный объект.

НО я также читал, что когда счет удержания объекта равен 0, метод dealloc вызывается.

, поэтому мой вопрос в том, что после того, как я уменьшил счет сохранения до 0, нужно ли мне снова освобождать объект в dealloc?

-(void)dealloc
[me release];

или что первый релиз выполнил?в противном случае, почему в любом случае вызывается dealloc?если счет сохранения = 0, мы в порядке, нет ??

большое спасибо.

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

Зависит от того, является ли переменная «me» переменной экземпляра, или «ivar», как она называется.

Для иваров вы помещаете релиз в Deloc. Для всего остального вы должны освободить его тем же способом, которым вы его создали.

Если, конечно, это объект с автоматическим выпуском, но это уже другая история ...

1 голос
/ 15 сентября 2011

Нет, вам не нужно снова выпускать там - на самом деле, не делайте этого!

Причина, по которой вызывается dealloc, заключается в том, что может произойти очистка.Например, если вы распределили память в своем классе, вы можете освободить ее там.И помните, что число сохранений может достигать 2, 3, 4, 5 .... поэтому, поскольку release выполнено, вы (как внешний пользователь класса) не знаете, что вызывается dealloc.Вот чем он отличается от релиза.

Стоит отметить, что метод dealloc не может быть сразу запущен, когда число достигнет 0. Это может быть сделано гораздо позже.

0 голосов
/ 16 сентября 2011

Во-первых, я думаю, что вы имеете в виду [me release];

Во-вторых, вы должны выпустить его только в dealloc, если сохранили его в файле .h, например @property (nonatomic, retain) run * me;

С этим вы устанавливаете retaincout of * me на 1, затем выделяете init для 2 в файле .m, затем вы должны отпустить * me два раза.Первый раз для alloc init, второй раз в dealloc для сохранения в .h

Надеюсь, это поможет.

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