Освобождение памяти в ios - PullRequest
       2

Освобождение памяти в ios

0 голосов
/ 20 декабря 2011
UIButton *btn = [[UIButton alloc]init];

В приведенном выше коде я должен выпустить btn, потому что я знаю, что выделил их, и позже мне нужно выполнить [btn release]; кое-где.

UIButton *btn = [UIButton buttonwithtype:UIButtonTypeRoundrect];

Во втором типе я должен выпуститьbtn или btn является автоматически выпущенным объектом, который мне не нужно вызывать самим выпуском?

Как освободить btn во втором типе?

Ответы [ 5 ]

2 голосов
/ 20 декабря 2011

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

Вместо этого просто подумайте, являетесь ли вы владельцем объекта или нет.Для методов, которые имеют alloc, new или copy в имени - или для объектов, для которых вы явно получили право собственности с помощью retain - это подразумевает, что вы владеете возвращенным объектом,и что вы должны отказаться от владения с release.Для объектов, которые вам не принадлежат, вам не нужно release их.

правила управления памятью очень просты.Зафиксируйте их в памяти, и ответы на подобные вопросы станут второй натурой.

1 голос
/ 20 декабря 2011

Вам не нужно отпускать кнопку во втором примере; [UIButton buttonWithType:] возвращает автоматически освобожденный объект.

Существует простое правило: вам нужно release только тогда, когда вы alloc, retain, copy или mutableCopy.

0 голосов
/ 26 декабря 2011

Во второй раз вам не нужно отпускать кнопку, она автоматически возвращает тип автоматического выпуска.И вы требуете, чтобы объект освобождался только тогда, когда вы им владеете (например, с помощью alloc, new или copy).

0 голосов
/ 26 декабря 2011

Первый случай:

Вы должны выпустить это, потому что у вас есть это.

  • Когда вы создаете объект (новый или alloc, copy или mutablecopy), он имеет сохранить счет 1, и вы им владеете.
  • Когда вы отправляете объекту сообщение сохранения, его счет сохранения увеличивается на 1, и вы владеете им.

Второй случай:

Кнопка, которую вы получаете, получена из удобного конструктора.

«Удобный конструктор» создает объект, которому отправляется сообщение об автоматическом выпуске.

Так что вы не должны отпускать кнопку во втором случае. Вы можете отправить сообщение об освобождении, только если вы отправили метод сохранения.

0 голосов
/ 20 декабря 2011

Во втором типе он возвращает объект автоматического освобождения, поэтому вам не нужно беспокоиться о его освобождении.

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