Не могу выпустить ViewController в функции - PullRequest
1 голос
/ 16 сентября 2011

Почему я не могу использовать [y release] в конце функции?

- (void)functionused:(NSTimer *)timer
{   
    [password resignFirstResponder]; 
    mainViewController* y=[[mainViewController alloc]initWithNibName:@"mainViewController" bundle:nil];
    UIView *currentView = (UIView *)[timer userInfo];

    for ( UIView *subview in [self.view.superview subviews] ) {

        if ((subview.tag != 14)) {

            [subview removeFromSuperview];
        }
    }
    [currentView.superview addSubview:[y view]];

    //[y release];
}

Ответы [ 2 ]

4 голосов
/ 16 сентября 2011

Потому что это приведет к нулю счетчика ссылок mainViewController, и он будет освобожден.Вам нужно где-то хранить ссылку на него.

Строка [currentView.superview addSubview:[y view]]; только добавляет свой вид в суперпредставление.Представление будет сохранено, но сам контроллер не будет.

2 голосов
/ 16 сентября 2011

В этом случае вам необходимо понять разницу между UIView и UIViewController. UIViewController содержит указатель на экземпляр UIView, но UIView не содержит прямой ссылки на UIViewController. Итак, когда вы добавляете представление контроллера представления в суперпредставление currentView, оно сохраняет приращения счетчика. Однако это не увеличивает счетчик сохранений для контроллера представления. В случае освобождения он будет равен 0, и это приведет к освобождению контроллера представления.

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