使用UIWebview添加UIPageviewController会在iPad3中创建意外的内存崩溃,但在iPad2中完美运行

时间:2013-04-25 05:27:36

标签: memory-management uiwebview uipageviewcontroller ipad-3

我正在开发iPad电子书类型应用程序。我必须从Web服务获取数据并在应用程序开始时在webView中显示它。所以在应用程序的开始我正在创建一个带有UIWebview的UIViewController数组。当我开始在38-42页面从一个页面遍历到另一个页面时,它只接收内存警告并且只在iPad3中崩溃但在iPad2中工作正常。

以下是代码。


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 pageContent = [[NSMutableArray alloc] init];
 for (int i=0;i<60; i++)
 {
[self addwebviewINCode]; } NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMin] forKey: UIPageViewControllerOptionSpineLocationKey]; self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options: options]; pageController.dataSource = self; pageController.delegate=self; [[pageController view] setFrame:[[self.window.rootViewController view] bounds]]; UIViewController *viewC = [self viewControllerAtIndex:0];

NSArray *viewControllers =  [NSArray arrayWithObject:viewC];
[pageController setViewControllers:viewControllers  
                         direction:UIPageViewControllerNavigationDirectionForward 
                          animated:NO 
                        completion:nil];

[self.window.rootViewController addChildViewController:pageController];
[[self.window.rootViewController view] addSubview:[pageController view]];
[pageController didMoveToParentViewController:self.window.rootViewController];

[self.window makeKeyAndVisible];

return YES;

}

我正在使用UIViewController添加Webview

NSArray *viewControllers =  [NSArray arrayWithObject:viewC];
[pageController setViewControllers:viewControllers  
                         direction:UIPageViewControllerNavigationDirectionForward 
                          animated:NO 
                        completion:nil];

[self.window.rootViewController addChildViewController:pageController];
[[self.window.rootViewController view] addSubview:[pageController view]];
[pageController didMoveToParentViewController:self.window.rootViewController];

[self.window makeKeyAndVisible];

return YES;

UIPageController委托方法


-(void)addwebviewINCode
{
 UIViewController *viewC = [[UIViewController  alloc] initWithNibName:nil bundle:nil];

self.webVCustom = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, _window.bounds.size.width, 1004)];//20

self.webVCustom.suppressesIncrementalRendering=YES;
self.webVCustom.delegate=self;
self.webVCustom.scrollView.scrollEnabled=NO;

viewC.view=self.webVCustom;

[pageContent addObject:viewC];

}

为什么这件事应该发生,因为它在iPad2上工作正常,但仅在iPad3中提供内存警告和崩溃

任何人都可以帮我解决这个问题吗?我花了太多时间来解决这个问题..

由于

1 个答案:

答案 0 :(得分:0)

看起来引用的代码预先生成所有视图控制器。您应该考虑仅在UIPageViewController请求时创建视图控制器。

对于初始的setViewControllers:direction:animated:completion:call,向它发送一个只有最初应该显示的视图控制器的数组(第一页)。

在pageViewController中:viewControllerBeforeViewController:和pageViewController:viewControllerAfterViewController:它将创建一个新的视图控制器,表示应该在参数中传递的视图控制器中包含的内容之前或之后显示的内容,而不是将索引引用到数组中。

这样您就不需要同时加载所有可能导致问题的页面(尤其是使用UIWebViews)。