2012-01-12 33 views
1

我正在尝试开发一种杂志类型的iPad应用程序,并遇到内存问题。 UIScrollView上有多个UIWebView-s。每个UIWebView都显示html文件源中的每个html页面。不幸的是,我找不到解决方案来处理Web视图,以便在应用程序加载后在后台平滑地加载它们,而不是加载并使用所有JavaScript和图像触发每个HTML页面,因为我希望它们一次都可见我在他们身上滑过,我在30个面板上收到“收到内存警告”消息,应用程序中断。UIScrollView上的多个UIWebView-

我用它来显示网页视图的代码是这样的:

NSInteger numberOfViews = 47; 
for (int i = 0; i < numberOfViews; i++) { 
    CGFloat yOrigin = i * 768; 
    DetailViewController *detailViewController2 = [[DetailViewController alloc] initWithNibName:@"Detail" bundle:nil]; 

    [detailViewController2.view setFrame:CGRectMake(yOrigin, 0, 768, 1024)]; 
    detailViewController2.view.clipsToBounds = YES; 
    [scroll.view insertSubview:detailViewController2.view atIndex:0];   
} 

scroll.scrollView.contentSize = CGSizeMake(768 * numberOfViews,1004); 
scroll.pageControl.numberOfPages = numberOfViews; 

self.view.clipsToBounds = YES; 
self.view.clearsContextBeforeDrawing = YES; 
CGRect frame; 
frame.origin.x = scroll.scrollView.frame.size.width * scroll.pageControl.currentPage; 
frame.origin.y = 0; 
frame.size = scroll.scrollView.frame.size; 
[scroll.scrollView scrollRectToVisible:frame animated:NO]; 
self.scrollViewController = scroll; 
[self.view insertSubview:scroll.view atIndex:0]; 

- (void)dealloc { 
    [scrollViewController release]; 
    [tableOfContentsViewController release]; 

    [portrait release]; 
    [tableOfContents1 release]; 
    [start release]; 

    [super dealloc]; 
} 

显示HTML内容的代码是DetaildViewController内:

NSString *htmlPath = [[NSBundle mainBundle] pathForResource:htmlfilename 
                 ofType:@"html" 
                inDirectory:@"/htdocs" ]; 

    NSString *html = [NSString stringWithContentsOfFile:htmlPath 
               encoding:NSUTF8StringEncoding 
                error:nil]; 

    web.delegate = self; 
    [web setMultipleTouchEnabled:YES]; 
    [web loadHTMLString:html 
       baseURL:[NSURL fileURLWithPath: 
         [NSString stringWithFormat:@"%@/htdocs/", 
          [[NSBundle mainBundle] bundlePath]]]]; 

- (void)dealloc { 
    //---release the memory used by the property--- 
    [page release]; 


    [web setDelegate:nil]; 
    [web stopLoading]; 
    [web release]; 


    [orientation release]; 
    [page release]; 

    [super dealloc]; 
} 

的问题是我怎么能加载它们顺利地在UIScrollView的背景中,并且只有在面板反弹到视口中时才会触发javascripts,我计划使用其html页面显示60多个网页浏览量?

回答

0

您需要回收您的意见。当一次只能看到一个视图时创建一系列视图并不是一个好策略。苹果有关于这个问题的一些冗长的视频教程。基本思想是最多使用3或4个视图(UiWebViews)。当您滑动并且视图边界变得可见时,您将其初始化。当它不再可见时,将其销毁。华尔街日报iPad & iPhone应用程序使用类似的模式。 这里是几个资源的链接&教程: Are there any good UIScrollView Tutorials on the net?

+0

你有链接到苹果视频回收网站的意见? – 2014-01-17 17:35:07