Создать UIButton с (или без) памятью - PullRequest
3 голосов
/ 17 февраля 2010

Я пытаюсь добавить UIB-кнопку с кодом (не Interface Builder).

В некоторых примерах говорится, что вы ДОЛЖНЫ выделить и освободить память для кнопки.

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

Как это возможно?

(Кажется, оба работают нормально.)

Какой из 2 методов я хочу использовать ... и когда? Есть ли какие-то огромные преимущества для одного метода или другого?

ПОЖАЛУЙСТА не говорите мне просто идти "читать документы". Документы - причина, по которой я здесь. Кажется, они редко что-то объясняют, не упуская тонны «недостающей информации».

Ответы [ 3 ]

10 голосов
/ 17 февраля 2010

buttonWithType: использует память, но это autoreleased. Это означает, что это будет released в какой-то момент в будущем. Так что [UIButton buttonWithType:] эквивалентно [[[UIButton alloc] initWithFrame:] autorelease].

Вы можете использовать любой метод, в зависимости от того, хотите ли вы быть явным или нет о выпуске.

3 голосов
/ 17 февраля 2010

Обе работы. Метод +buttonWithType: - это удобный метод, аналогичный

.
[[[UIButton alloc] initWithType:type] autorelease];

Поскольку он уже -autorelease 'd, вы не можете -release его.

Для встроенных кнопок (например, прямоугольник с закругленными углами, информационные кнопки и т. Д.) Необходимо использовать +buttonWithType:, потому что других способов их создания нет. В противном случае оба варианта хороши.

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

Существует два способа управления памятью в Какао: счетчик ссылок и авто-релиз .

Согласно политике управления памятью в Какао ,

У вас есть любой объект, который вы создаете

Вы создаете объект, используя метод, имя которого начинается с «alloc», «new», «copy» или «mutableCopy» (например, alloc, newObject или mutableCopy).

buttonWithType не имеет префикса, как указано выше, поэтому у вас нет кнопки, созданной buttonWithType . Фактически, buttonWithType использует метод пыльника, autorelease , чтобы отпустить созданную кнопку.

...