2015-08-26 2 views
0

Я ищу, чтобы представить тот же ViewController примерно 30 раз (макс.). Приложение проходит через заданную последовательность информации с помощью нескольких этапов. Пользовательский интерфейс содержит только веб-просмотр, отображающий текстовую информацию, однако иногда добавляется табличное представление, чтобы пользователь мог отвечать на вопросы на основе информации. Я пробовал много способов, но самый эффективный способ сделать это, хотя я могу заставить его работать нормально. Я получаю много заброшенной памяти, которая значительно замедляет приложение (Я использую ARC)iOS Лучший способ представить до 30 Viewcontrollers (ARC)

Вариант 1 Я попытался с помощью UIPageViewController, который прекрасно работает, однако на iPhone 4 она вялая и лага т.е.

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; 

Вариант 2 Я попытался нажать на viewcontroller (на себя), который снова работает отлично, но память не освобождается, а заброшенная память увеличивается примерно до 20 мб.

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

Я боролся с этой проблемой в течение нескольких недель, возможно, где-то есть эффективное решение для памяти?

Пинта для успешного ответа перед Mac получает выброшен из окна :)

Заранее спасибо

+0

Не совсем понятно, что вы просите, но просто используйте для этого контейнеры, в эти дни в iOS http://stackoverflow.com/a/23403979/294884 – Fattie

+0

Спасибо, Джо, посмотрим. –

ответ

1

ViewControlle может содержать слишком много ресурсов, таких как изображения, ImageView, View, этикетки ... Все эти элементы интерфейса будут занимать много памяти. Поэтому я думаю, что лучший способ представить 30 контроллеров представлений имеет два момента, о которых следует обратить внимание.

  1. Использование прокрутки для отображения содержимого, все элементы в вашем контроллере просмотра могут быть вставлены в него.
  2. Использование LAZY LOAD для отображения содержимого. В сочетании со списком прокрутки вы можете использовать вид cycle scroll. Просмотр прокрутки цикла загрузит последние три изображения и сохранит их в памяти, поэтому независимо от того, сколько представлений будет представлено, память будет оставаться на низком уровне.
+0

Спасибо, много lynulzy сделали это раньше, но Хавент попробовал это в этом контексте. –

0

Я бы придерживался UIPageViewController. Предполагая, что вы правильно используете методы dataSource и delegate, должно быть не более 3 ViewControllers в памяти в любой момент времени (текущий VC, следующий VC и предыдущий VC). iOS позаботится об управлении памятью для ViewControllers по обе стороны от них.

Если вы хотите получить более подробный ответ, вам следует отправить код. Из вашего вопроса неясно, чего вы пытаетесь достичь.

0

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

Сначала проверьте все ссылки на контроллеры представления, которые не удаляются. Их ли они установлены на nil?

Во-вторых, проверьте место, где контроллер представления передан в блок (в том числе, где self или свойство self ссылается от блока). Сохраняется ли этот блок где-нибудь? Или он подходит к завершению и уничтожается?

В-третьих, попробуйте профилировать приложение. Иногда посещение меню «Построение» и нажатие «Профиль» может вызвать интересные результаты.

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