UIView가 있습니다. 한 가지 방법으로 WebView를 할당하고 retain 속성으로 설정합니다.
self->webView= [[UIWebView alloc] initWithFrame:self.frame];
그런 다음 HTML 문자열을로드하기 시작합니다. 로드 된 후에는 크기 조정을 위해 뷰의 크기를 조정하고 수퍼 뷰에 대한 콜백을 시작합니다. 효과가 있습니다. 내 문제는보기가로드되기 전에 사용자가 돌아 가면보기가 해제된다는 것입니다. 그럼 내 WebView는 BAD_ACCESS를 던집니다.
-(void)dealloc{
[self.webView setDelegate:nil];
[self.webView stopLoading];
[self setWebView:nil];
[htmlStr release];
[super dealloc];}
콜백 추적이 화면에 표시되어 다음은 할당 해제의 방법이다. 흥미로운 점은 WebView를 공개하지 않으면 매력과 같은 것입니다. 나는 웹보기를 해제하면 할당이 해제 때, 다음, 나는 로그에 오류 메시지가 :
![bool _WebTryThreadLock(bool), 0x4e05150: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...][1]
편집 : 그것은 수정되었습니다. 내 이미지 로딩 방법이 유죄라는 것이 밝혀졌습니다. 이미지를로드하고 완료되면 performSelectorOnMainThred :를 만들기 위해 새 스레드 (NSOperationQueue 및 NSInvocationOperation)를 시작했습니다. 정말 큰 오버 헤드였던 모든 페이지 전환에 수백 개의 작은 (1-2 KB) 이미지를로드했습니다. 하나의 스레드에서 이미지를 하나씩 다운로드하는 방법을 쓸 때이 버그가 다시는 발생하지 않았습니다.
동일한 뷰의'viewWillDisappear'에서'[self.webView setDelegate : nil];을 호출 해보십시오. – Nekto
당신이하는 일을 정확히 알지 못하는 경우 -> 표기법을 사용하여 객체에 변수를 설정하지 마십시오. 거의 정확하지 않습니다. 일반적인'setWebView :'또는'self.webView ='표기법을 사용하십시오. –