2012-01-20 4 views
4

사용자가 앞으로 또는 뒤로 이동할 때마다 적어도 2 개의 하위보기가있는 UIView를 만드는 iPad 앱 (IOS 4.3 & 5.0)이 있습니다. 2 개의 하위 뷰는 UIWebView 객체입니다.UIWebView 메모리 누수

모든 관련 스 와이프에서 이전 UIWebView가 제거되고 올바르게 할당 해제되고 (removeFromSuperview, stopLoading 및 delegate가 nil로 설정 됨) 상위 UIView가 할당 해제됩니다. 부모 UIView와 두 자식 UIWebViews가 완전히 없어 졌음을 확인할 수 있습니다.

웹 뷰가 삭제 될 때 보유 수를 확인할 수 있으며 매번 실제로 제거 될 것으로 확신합니다. 그러나 내 메모리 할당은 ~ 200-350k마다 모든 스 와이프에서 계속 증가합니다. 악기에 누출이 없지만 메모리 사용량이 천천히 증가하는 것을 볼 수 있습니다. iPad 1에서 앱은 결국 (중간 사용으로 6-10 분 내에) 여러 개의 메모리 경고를 수신하고 종료됩니다. LowMemory 크래시 로그 ... 등이 생성됩니다.

우리는 stringByEvaluatingJavaScriptFromString과 loadRequest를 사용하여 Webview를 채 웁니다. webViews에 아무 것도 주입되거나로드되지 않은 경우에도 메모리 사용량이 올라갑니다.

아무도 이러한 종류의 UIWebViews 동작이 발생합니까? 이 문제를 성공적으로 처리 한 사람이 있습니까?

비록 의견, & 답변을 크게 부탁드립니다.

+0

당신은 슈퍼 뷰에서 제거하고,로드를 중단하고, 위임자를 nil로 설정합니다. 그러나 해당 웹 뷰에 추가 보유 권한이 없습니까? 아마도 당신은'@property (nonatomic, retain)'을 고려하지 않았을까요? – Tim

+0

안녕하세요,이 싸우는 행운이 있었나요? –

+1

순환 참조. 내 의견 중 하나가 여전히 컨트롤러에 매달려있었습니다. 결국 고전적인 메모리 물건,하지만 힘든 거대한 코드베이스에서 다루는. – smaura777

답변

0

누수는 알지 못하지만 모든 스 와이프 때 동일한보기 계층 구조를 파괴하고 다시 만드는 경우보기를 저장하고 대신 사용하십시오.

누수 여부에 관계없이 웹보기는 컴퓨터를 사용하는 데 비용이 많이 들기 때문에 재사용하고 콘텐츠를 다시로드하면 성능이 향상되고 누출 문제도 해결 될 수 있습니다.

+0

그건 실제로 옵션이 아니에요. 그렇습니다. 처음에 그랬고 메모리 할당은 여전히 ​​모든 스 와이프에 적용되었습니다. – smaura777

+0

http://stackoverflow.com/a/5056158/990618 –

1

인스트루먼트를 사용하지만 "할당"템플릿을 사용하여 UIWebView의 "# Living"열을보십시오. 나는 보통이처럼 사용 등

  • 을 눌러 "마크 힙을"를 스크롤
  • 모든 탭을 통해 이동하여 응용 프로그램 "을 경고"할당 템플릿

    1. 프로필 응용 프로그램이이 생성됩니다 "기준"heapshot
    2. 당신이 원인 객체이는 "Heapshop 번호"를 만들 것이다, 다시 주위
    3. 을 눌러 "마크 힙을"머물 생각하는 일을 할 heapshot
    4. 있는 표시됩니다 "Heapshop 번호"에있는 개체를 검사 생성 된 객체의 크기 및 수 마지막 힙샷 이후로 살아 있습니다.
    5. 고토 4
  • +0

    나는 지난 주에 그렇게 해왔습니다. 웹뷰가 공개 된 후에도 여전히 웹뷰의 무언가가 계속 매달려 있다는 것을 분명히 알 수 있습니다. 모든 웹보기를 사용 중지하면 문제가 거의 사라집니다. – smaura777

    +0

    좋아요, 그럼 당신은 #living이 많은 물체를 끊임없이 올라간다는 것을 알 수 있습니까? –

    0

    이 문제가 계속 표시 되니? 나는 무제한의 메모리 사용량과 같은 것을 추적 (반드시 누출,하지만 난 메모리 부족 경고 및 최종 프로세스 종료를 얻을 수) 반복 stringByEvaluatingJavaScriptFromString 호출하여 : 거기에 뭔가 이상한이 같은

    [webview stringByEvaluatingJavaScriptFromString:@"something()"]; 
    

    것 같다.

    +0

    나는 그 방법을 많이 사용하고 있으며, 나는 그것을 또한보고있다. 불행히도 나는 그것을 다른 것으로 바꿀 수는 없다. – smaura777