我为基于图画书的每个基于页面使用单独.h
的.m
, 和文件。每个页面都加载了动画、音乐等,大约需要 4MB 的内存。在 Instruments 中,随着每一页的加载,可用内存会下降约 4MB。当页面被翻页时,这个内存永远不会被释放。它最终会给出内存警告。 似乎将它实例化的每个页面都保留在内存中并且不会卸载它。因此,当页面快速翻动时,应用程序就会崩溃。.xib
UIViewController
UIPageViewController
UIPageViewController
我希望能够卸载除UIPageViewController
前一页、当前页和下一页所需的 3 个以外的所有页面。我如何卸载不需要的页面,因为它们是由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
-(void)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 不释放内存”,但没有以相同的方式设置视图控制器。
我试图将不需要的页面设置为 nil,以便 ARC 可以在没有运气的情况下删除它们。我应该尝试任何建议或替代路径吗?我喜欢卷页效果,但在其他地方找不到一个很好的水平卷页效果。
谢谢!埃里克