Авто-релиз ViewController Управление памятью - PullRequest
0 голосов
/ 08 декабря 2011

В моем mainViewController я добавляю представление из другого ViewController.Я удаляю его вид, когда закончил.Как правильно управлять этим и где я могу освободить контроллер представления?

mainVc.m
-(void)showView {

  helpPage *elementController = [[helpPage alloc] init];
  [self.view addSubview:elementController.view];

}

helpPage.m
-(void)removeView {

  [self.view removeFromSuperview];

}

Ответы [ 2 ]

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

Я думаю, вы ищете что-то вроде этого

mainVc.m
-(void)showView {

  helpPage *elementController = [[helpPage alloc] init];
  [self.view addSubview:elementController.view];
  [elementController release];

}

helpPage.m
-(void)removeView {

  [self.view removeFromSuperview];

}

Конечно, я не видел остальную часть вашего кода, так что это может быть не то, что вы ищете.Однако, с точки зрения распределения памяти, каждый раз, когда вы что-то alloc что-то делаете, вы должны освободить его позже.В случае представлений и контроллеров представления, когда вы добавляете это представление или контроллер представления, вы можете release скопировать «выделенную» копию.

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

Поскольку вы вызвали alloc init на контроллере в этом экземпляре mainVc, этому экземпляру mainVc принадлежит освобождение контроллера.

Когда он вызывает addSubView, он сохраняет представление (и добавляет к иерархии представления), а когда он удаляется из суперпредставления, он освобождается. В тот момент, когда он выпускается, контроллер, который создал представление, все еще сохраняет его. Когда оба освободят представление, оно исчезнет.

Вот соответствующий пост SO:

Действительно ли addSubview UIView сохраняет представление?

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