2010-12-13 3 views
1

modalViewController 하위보기 (플립형 전환)로 나타나는 UIWebView에서 YouTube 비디오를 재생 중입니다. UIWebView가 릴리스 되어도 모든 것이 잘 작동하지만이 modalViewController를 반복해서 선택하면 메모리 경고가 표시됩니다.UIWebView 메모리 문제

프로그래밍 방식으로 ViewDidLoad에 내 UIWebView를 추가했습니다. viewDidDisappear 내부 나는 [UIWebView retainCount] 확인하고 1보다 큰 경우, 다음 단계를 수행 : 나는 엑스 코드 3.2.5, 아이폰 OS 4.2에 내 코드를 실행하고

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 
[self.webView removeFromSuperview]; 
self.webView.delegate = nil; 
self.webView = nil; 

NSLog(@"[self.webView retainCount] %d", [self.webView retainCount]); 

.

모두 도와 주셔서 감사합니다.

답변

5

나는 당신이 잘못된 방식으로 메모리 관리 문제에 접근하고 있다고 생각합니다. retainCount를 확인하는 것은 수행중인 작업을 알고있는 경우 유효한 디버깅 기술입니다. 그러나 메모리 관리 도구는 아닙니다. 특별한 경우, UIWebView가 표시되고 있으면 항상 count> 1을 유지합니다. 수퍼 뷰는 "if"를 쓸모 없도록 유지합니다.

self.webView = nil; 

는 웹보기를 해제해야합니다 : 웹보기 속성이 잘 정의되어있는 경우

문 (즉 noatomic, 유지).

self.webView = [[UIWebView alloc] init]; 

이것은 웹보기가 "유지"로 정의 된 경우 누출을 도입 가능성 : 일반적인 실수로 속성을 초기화하는 것입니다. 올바른 방법은

self.webView = [[[UIWebView alloc] init] autorelease]; 

메모리가 부족하여 여러 번 컨트롤러를 표시 할 수없는 경우 메모리 누수가 있습니다. 인스 트루먼 트 (특히 누수)를 사용하여 적절히 릴리스되는 노트가있는 대상을 찾습니다. This is a good tutorial.

보관 및 방출 균형 유지 및 누출 점검에주의하십시오.

+0

답변 해 주셔서 감사합니다. 실제로, 나는 webview를 다음과 같이 초기화했다 : self.webView = [[[UIWebView alloc] initWithFrame : CGRectZero] autorelease]; 인스 트루먼 트를 통해 관중의 해고에 대한 누출을 발견 할 수 없습니다. 그러나 컨트롤은 레벨 1 경고와 함께 didReceiveMemoryWarning 메소드에 도달하고 앱이 다운됩니다. – random

+0

@techenthusiast 솔루션을 찾았습니까? 솔루션을 게시하면 매우 유용합니다. 똑같은 경고가 mycase에서 반복되고 충돌했다. 이미지를로드하는 네 개의 webview를 사용하고있다. –