какую функцию я должен реализовать, чтобы очистить представление UINavigationController - PullRequest
1 голос
/ 08 марта 2011

У меня есть UINavigationController с табличным представлением.Как стандартное поведение, когда элемент в списке выбран, я помещаю customViewController в UINavigationController.Появляется CustomView, и я вижу кнопку «Назад» в строке заголовка.

Мой вопрос: когда я нажимаю кнопку «Назад» в строке заголовка, чтобы вернуться к списку, какую функцию я реализую, чтобы убедиться,что все, что было создано в customViewController, полностью уничтожено и удалено из памяти?

Я пытался поместить мой код очистки в метод viewdidunload пользовательского контроллера, но это даже не вводится, когда я нажимаю кнопку возврата.

(Также я не совсем уверен, как сформулировать этот вопрос, поэтому предложения приветствуются)

Ответы [ 4 ]

0 голосов
/ 08 марта 2011

Я всегда помещаю свой код очистки в dealloc:

-(void)dealloc {
   // cleanup code here
   [super dealloc];
}
0 голосов
/ 08 марта 2011

Выделенные контроллеры внутри UINAvigationController будут удалены автоматически.Если вам нужно разрешить только один прямой эфир, вместо этого создавайте детальный контроллер глобально в вашем навигационном контроллере каждый раз, когда вам нужно перейти к подробному виду, чтобы вы всегда использовали один и тот же контроллер.Вы можете очистить его, если нажать кнопку «Назад» с помощью метода viewDidDisappear .

0 голосов
/ 08 марта 2011

Apple все очень четко объясняет в их документации (с красивыми картинками и всем!). В основном, когда вы показываете вид, который вы используете pushViewController:animated:, а когда вы возвращаетесь назад, вы используете popViewControllerAnimated:.

Используйте что-то вроде этого, чтобы перейти на новый экран:

- (IBAction)goSomewhereButtonPressed:(id)sender {
    SomewhereViewController *vc = [[SomewhereViewController alloc] initWithNibName:@"SomewhereView" bundle:nil];
    [self.navigationController pushViewController:vc animated:YES];
    [vc release];
}

При нажатии кнопки НАЗАД он очистит ваш экран. Apple рекомендует использовать UINavigationControllerDelegate для дополнительной настройки и очистки при необходимости.

Поместите очистку экрана в контроллер (SomewhereViewController).

    - (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    NSLog(@"Somewhere's viewDidUnload called");
}

- (void)dealloc
{
    [super dealloc];
    NSLog(@"Somewhere's dealloc called");
}
0 голосов
/ 08 марта 2011

Метод viewDidUnload для UIViewController кажется хорошим местом для очистки памяти, то есть для освобождения всех объектов, которые могут быть легко воссозданы в viewDidLoad или более поздних версиях.

Но не гарантируется, что сам контроллер представления будет освобожден. UINavigationController может кэшировать объект внутри.

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