2012-01-12 3 views
1

개발하고있는 잡지 종류의 iPad 앱을 실험 중이며 메모리 문제가 발생했습니다. UIScrollView에는 여러 개의 UIWebView가 있습니다. 모든 UIWebView는 html 파일 소스의 각 html 페이지를 표시합니다. 불행히도 일단 내가 볼 수 있기를 원하기 때문에 일단 app이로드되고 백그라운드에서 모든 HTML 페이지를 자바 스크립트와 이미지로로드하는 대신 웹 뷰를 처리하기위한 솔루션을 찾지 못했습니다. 나는 그들을 통해 슬쩍, hovewer 나는 30 패널과 응용 프로그램에서 휴식 시간에 "받은 메모리 경고"메시지가 나타납니다.UIScrollView에 여러 개의 UIWebView-s가 있습니다.

나는 웹보기를 표시하기 위해 사용하는 코드는 다음과 같습니다

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의 backround에서 패널이 뷰포트로 튀어 오면 javascript 만 실행합니다. html 페이지로 60 개가 넘는 웹 뷰를 표시 할 계획입니까?

답변

0

보기를 재활용해야합니다. 한 번에 하나씩 만 볼 수있을 때 많은 수의 뷰를 만드는 것은 좋은 전략이 아닙니다. 애플은이 주제에 대해 비디오 튜토리얼을 몇 권 갖고있다. 기본 개념은 최대 3 ~ 4 개의 뷰 (UiWebViews)를 사용하는 것입니다. 스 와이프하고보기 경계가 표시되면 초기화합니다. 더 이상 보이지 않을 때 당신은 그것을 파괴합니다. Wall Street Journal iPad & iPhone 앱도 비슷한 패턴을 사용합니다. 다음 리소스에 대한 링크가 있습니다 & 튜토리얼 : Are there any good UIScrollView Tutorials on the net?

+0

웹 비디오보기로 다시 연결되는 링크가 있습니까? –

관련 문제