Управление памятью Objective-C: если я выделяю init несколько раз, мне нужно освобождать несколько раз? - PullRequest
0 голосов
/ 18 июля 2010

Если у меня есть UIPopoverController (в файле .h) и я размещаю его несколько раз в одном и том же файле .m.мне нужно выпустить один раз или несколько раз?

Ответы [ 2 ]

4 голосов
/ 18 июля 2010

Ссылка на счет здесь.

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

Существует два распространенных способа получить право собственности на объект:

  • Вы создаете его самостоятельно (вызывая метод alloc)
  • Вы звоните retain на нем

И, кроме того, есть два распространенных способа отказаться от владения объектом:

  • Вы звоните release на нем
  • Вы звоните autorelease на него

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

0 голосов
/ 18 июля 2010

Вы не выделяете объект несколько раз. Вы создаете его, выделяя его один раз. Каждый раз, когда вы отправляете alloc для класса, вы создаете новый экземпляр. Поскольку вы разрешили все эти экземпляры (см. правила управления памятью ), вы должны разблокировать или автоматически выпустить их все.

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