Освобождение неиспользуемых страниц в UIPageViewController
Я использую отдельный.h
, .m
, а также.xib
файлы для каждогоUIViewController
на основе страницыUIPageViewController
на основе иллюстрированной книги. Каждая страница загружается с анимацией, музыкой и т. Д. И занимает около 4 МБ памяти. В приборах свободная память уменьшается примерно на 4 МБ при загрузке каждой страницы. Эта память никогда не освобождается при переворачивании страниц. Это в конечном итоге дает предупреждения памяти.UIPageViewController
Кажется, что каждая страница, которую он создает, хранится в памяти и не выгружает ее. Поэтому, когда страницы переворачиваются быстро, приложение вылетает.
Я хотел бы иметь возможность выгрузить все страницы, кроме 3, необходимыхUIPageViewController
- предыдущая, текущая и следующая страницы. Как я могу выгрузить ненужные страницы, так как они были созданыUIPageViewController
.
Ниже приведен массив страниц, которыеUIPageViewController
тянет от. Все страницы (Page1, Page2 и т. Д.) В основном просто загружают файлы изображений, обеспечивают базовую анимацию и имеют музыку.
//ARRAY OF PAGES
pageArray = [[NSArray alloc] initWithObjects:
(id)[[Page1 alloc] initWithNibName:nil bundle:nil],
[[Page2 alloc] initWithNibName:nil bundle:nil],
[[Page3 alloc] initWithNibName:nil bundle:nil],
[[Page4 alloc] initWithNibName:nil bundle:nil],
[[Page5 alloc] initWithNibName:nil bundle:nil],
[[Page6 alloc] initWithNibName:nil bundle:nil],
[[Page7 alloc] initWithNibName:nil bundle:nil],
[[Page8 alloc] initWithNibName:nil bundle:nil],
// continues all the way up to page 47
[[Page47 alloc] initWithNibName:nil bundle:nil],
nil];
Я пропустил стандартную инициализацию дляUIPageViewController
, Оно использует "nextPageNumber
"вытащить нужную страницу изpageArray
выше, чтобы создать новый объект страницы.
-(void)turnPageForward{
[pageController setViewControllers:[NSArray arrayWithObject:[pageArray objectAtIndex:nextPageNumber]]
direction:UIPageViewControllerNavigationDirectionForward
animated:YES completion:^(BOOL finished){
}];
}
Я пытался создать объект "pageIndex
«(см. ниже), который устанавливается равным нулю после предоставления егоpageController
, Это не сработало. Страница все еще занимала память после того, как страницы продвинулись.
//PROGRAM PAGE FORWARD
- (недействительными) turnPageForward {
UIViewController * pageIndex =[pageArray objectAtIndex:nextPageNumber]; //nextPageNumber is the next page to load
[pageController setViewControllers:[NSArray arrayWithObject:pageIndex]
direction:UIPageViewControllerNavigationDirectionForward
animated:YES completion:^(BOOL finished){
}];
pageIndex = nil;
}
Я просматривал stackoverflow для сообщений, использующих тот же способ предоставления страницUIPageViewController
, но не нашли ничего близкого. Ближайший былARC не освобождает память при возврате в навигационном контроллереmsgstr "но не устанавливает контроллеры вида таким же образом.
Я попытался установить ненужные страницы на ноль, чтобы ARC мог удалить их без удачи. Любые предложения или альтернативные пути, которые я должен попробовать? Мне нравится эффект скручивания страницы, и я не смог найти хорошего в другом месте, который делает горизонтальные скручивания страницы.
Спасибо! Эрик