Нужно ли выпускать контроллеры представления в настройке UIPageViewController? - PullRequest
0 голосов
/ 05 февраля 2012

Я использую шаблон Apple UIPageViewController из XCode для создания интерактивных фотокниг.Все работает отлично, за исключением того, что всякий раз, когда я переворачиваю страницу (создаю новый viewcontroller), распределение памяти увеличивается и увеличивается до тех пор, пока приложение не падает.Мне кажется, что контроллеры представления никогда не «освобождаются» (разрешено ли мне использовать это слово в среде ARC?).Похоже, это не имеет никакого отношения к содержанию страниц, потому что, когда я закомментирую все элементы создания контента в ... DataViewController, память все равно будет увеличиваться и увеличиваться каждый раз, когда я переворачиваю страницу, не так впечатляюще, каккогда большое изображение было включено, но оно все еще продолжает набирать обороты.

Здесь был точно такой же вопрос: PageViewController: как выпустить добавленные в него ViewControllers? но этот имеет дело спредварительная арка и раскадровка.Добавление автоматического выпуска не разрешено, и, конечно, кажется, что компилятор НЕ заботится об этом.: - (

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 11 марта 2012

Проблема оказалась недостаточно проклятой конструкцией UIImage imagedNamed.Вероятно, это моя вина, что я не проверял после того, как где-то прочитал, что это было исправлено в недавнем выпуске xcode.Поэтому я предположил, что изображения больше не кэшируются, тогда как обратное было правдой.Как только я изменил все на «UIImage imageWithContentsOfFile», приложение начало работать гладко как детское дно.

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

У меня была такая же проблема при создании книжки с картинками с очень большими изображениями.Я перешел к другому вопросу, на который вы указали ссылку, и он решил ее для меня.Добавление "autorelease" освобождает память.

В методе делегата UIPageviewcontroller "viewControllerAtIndex".Я изменил с:

// Create a new view controller and pass suitable data.
ContentViewController *contentViewController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil];

и добавил авто-релиз

// Create a new view controller and pass suitable data.
ContentViewController *contentViewController = [[[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil] autorelease] ;

Это не было включено в пример с Apple, но я также использую xib для каждой страницы.Я отлаживал это с помощью инструментов и видел, как память сразу же восстанавливается, и вызывается dealloc, когда этого не было раньше.

нашел ответ здесь ... https://stackoverflow.com/a/7934392/1212585

...