управление памятью стека - PullRequest
1 голос
/ 16 февраля 2012

Я создал навигационный контроллер, в котором контроллер представления может быть нажат несколько раз ... например, если мы скажем, что мы создали ViewController с позицией в памяти <x1234>, и я добавляю его один раз с индексом 5, один раз с индексом 7 ..Что насчет памяти? Она через некоторое время вылетит или проблем не будет, потому что я всегда использую один и тот же объект?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Вы не можете вставить один и тот же объект в стек контроллера навигации более одного раза :

Важно! В iOS 2.2 и более поздних версиях, если объект в viewController параметр уже находится в стеке навигации, этот метод выдает исключение. В более ранних версиях iOS метод просто ничего не делает.

Но вы можете нажать разные экземпляры одного и того же контроллера представления.

iOS будет отправлять предупреждения о памяти (где вы можете очистить любое временное хранилище, которое вы можете создать заново) и выгружать любые невидимые представления. Это означает, что накладные расходы нового контроллера представления относительно невелики, но не равны нулю. - это предел, за которым вы будете сталкиваться с проблемами, но на практике, если вы правильно соблюдаете правила управления памятью, он довольно высок. Конечно, выше, чем ограничения, налагаемые созданием пользовательского интерфейса.

0 голосов
/ 16 февраля 2012

Нельзя добавить один контроллер представления несколько раз в один стек. Но вы можете создать несколько экземпляров (они будут иметь разную позицию в памяти) и поместить их в стек навигации. Конечно, если вы создадите более 1000 экземпляров, ваше приложение будет аварийно завершено. Фактически, стек обычно содержит 1-10 контроллеров представления, и все работает отлично.

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