как удалить подпредставление, которое было выпущено - PullRequest
0 голосов
/ 25 мая 2011

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

for (int i = 0; i < 9, i++) {
        UIButton *btn = [indexButtons objectAtIndex:i];
    btn.tag = x;
    [notePage1 addSubview:btn];
    [btn release];

}

Как мне избавиться от одного из этих бат, например, номер 0? Я думал о

UIButton *btn = [indexButtons objectAtIndex:0];
if ([btn isDescendantOfView:notePage1]) { [btn removeFromSuperview]; }
[btn release];

Но это просто приведет к падению приложения. Я не получаю журнал ошибок вообще? - приложение просто завершается. Как мне сделать это правильно?

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Не следует отпускать кнопку, потому что вы ее не распределили.

Это все о владении объектом. Вы никогда не должны выпускать объект, который вам не принадлежит. Вы можете стать владельцем объекта, отправив одно из следующих сообщений:

  • Alloc
  • новый
  • 1010 * сохранить *
  • копия
1 голос
/ 25 мая 2011

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

Ваш код должен быть:

for (int i = 0; i < 9, i++) {
        UIButton *btn = [indexButtons objectAtIndex:i];
    btn.tag = x;
    [notePage1 addSubview:btn];
}

и

UIButton *btn = [indexButtons objectAtIndex:0];
if ([btn isDescendantOfView:notePage1]) { [btn removeFromSuperview]; }

Добавление к суперпредставлению автоматически увеличивает количество сохраняемых файлов и автоматически удаляет релизы. Вам не нужно беспокоиться об этом.

1 голос
/ 25 мая 2011

не отпускайте кнопки, вы их никогда не выделяли

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