2013-04-12 5 views
0

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

Я использую программный код для просмотра с performSegueWithIdentifier:.

Это работает как шарм, но я заметил, что каждый раз, когда я это делаю, я создаю новый экземпляр этого viewController, и поэтому у меня есть память, которая продолжает накапливаться. Когда я имитирую предупреждение о памяти, я вижу, что за каждый раз, когда я звонил performSegueWithIdentifier:

У меня есть новый экземпляр контроллера вида, и он НИКОГДА не освобождается. Таким образом, память просто накапливается, и я не могу ее освободить, что в конечном итоге приводит к сбою.

Я просто пойти на контроллер представления, как это:

// If sales are registered, go to view 
[self performSegueWithIdentifier:@"previousSaleSegue" sender:self]; 

Что я здесь отсутствует?

+0

показать нам свои коды в 'performSegueWithIdentifier:'. – Raptor

+0

сделано, но нет ничего особенного – Seerex

ответ

1

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

A --push--> B --finished! Push---> New A ---Push---> B ---Finished! push--->A ... 

То, что вы должны делать:

A --push--> B --finished! Pop - 
^-----------------------------/ 

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

[self dismissViewControllerAnimated:YES completion:nil]; 
+0

Я не использую навигационный контроллер, но, может быть, концепция такая же? PerformSegueWithIdentifier создает новый экземпляр и бросается в стек. Тогда, если мне нужно вернуться к предыдущему сеансу, мне придется «убратьПросмотр», чтобы удалить его? это то, как это нужно понимать? :) – Seerex

+0

Как вы «возвращаетесь в предыдущий сегмент»? – proxi

+0

Использование раскадровки segues, непосредственно перетаскивая ее с кнопки возврата со стилем мода – Seerex

0

Если вы уверены, что экземпляр viewcontroller не освобождается, это должно быть потому, что вы храните ссылку на него где-то (это может быть цикл на самом контроллере).

+0

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