iOS SDK: ARC removeFromSuperview - PullRequest
       0

iOS SDK: ARC removeFromSuperview

1 голос
/ 26 января 2012

У меня простой вопрос по поводу ARC.Я показываю UIView, если пользователь нажимает кнопку, используя addSuperView в UIViewController.UIView содержит кнопку закрытия, если нажать, я хочу удалить представление.

Я использовал для вызова метода в UIViewController после анимации представления за пределами экрана:

- (void)viewDidClose:(UIView *)view
{
     [view removeFromSuperview];
     [view release], view = nil;
}

Теперь с помощью ARC Iизменил его на:

- (void)viewDidClose:(UIView *)view
{
     [view removeFromSuperview];
     view = nil;
}

Вопрос теперь таков: я хочу удалить протокол и делегирование контроллеру представления и сделать это в самом UIView.

Pre-ARC (в пределах видимости):

- (void)didStop
{
     [self removeFromSuperview];
     [self autorelease];
}

Я не могу использовать «autorelease» в ARC или установить «self = nil», насколько я знаю, ARC имеет местокак только я установлю представление на ноль или заменим его, но что, если я не заменю его?Достаточно ли [view removeFromSuperview], чтобы позаботиться обо всем или эта утечка?

Большое спасибо!Я ценю любую помощь!

1 Ответ

0 голосов
/ 26 января 2012

(Обратите внимание, что в вашей версии, отличной от ARC, вы хотите, чтобы autorelease до removeFromSuperview).

Я задавался вопросом о подобных вещах.«Опасность» заключается в том, что когда вы делаете removeFromSuperview, не выполнив сначала autorelease, объект немедленно освобождается, даже до завершения метода.Это скучно.

Я думал, что вы заставите метод вернуть self.В случае не ARC вы должны создать этот указатель с autorelease, но ARC должен сделать это за вас.Возможно, вам не нужен указатель в вызывающей стороне, но я считаю, что это заставит ARC делать то, что вы хотите.

...