iOS 에서 wkwebView 메모리 누 출 및 순환 참조 문제 상세 설명
현재 대부분의 네트워크 도 wkwebview 를 불 러 옵 니 다.이전에 wkwebview 를 사용 할 때 인터넷 의 많은 기본 튜 토리 얼 을 많이 사용 합 니 다.Message Handler 를 어떻게 추가 하 는 지 말 했 을 뿐 이 메모리 가 누 출 될 위험 이 있다 는 것 을 알려 주지 않 았 습 니 다.만약 에 내부 데이터 만 호출 했 을 뿐 이 문 제 를 전혀 발견 하지 못 했 습 니 다.스 포 일 러 를 저장 하지 않 았 다 는 문 제 는 크 지 않 고 작 지 않다 고 말 합 니 다.심각 하면 바로 app 에서 물 러 나 기 때문에 중시 해 야 합 니 다.자,다음은 어떻게 해결 할 지,더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.
해결 방법
1.웹 페이지 의 js 상호작용 을 할 때 우 리 는 모두 이렇게 js 를 추가 합 니 다.
[self.customWebView.configuration.userContentController addScriptMessageHandler:self name:obj];
뒤에 도 delloc 가 추가 되 었 습 니 다.
- (void)dealloc {
[_customWebView removeObserver:self forKeyPath:@"estimatedProgress"];
[self removeScriptMessageHandler];
}
나중에 웹 페이지 를 불 러 올 때 pop push 는 여러 번 메모 리 를 작 동 하 는 것 이 계속 증가 하고 높 을 때 200 상하 가 다 되 어서 야 이 메모리 문 제 를 알 게 되 었 습 니 다.처음에 해결 방법 은:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self removeScriptMessageHandler];
}
나중에 문제 가 여전히 존재 한 다 는 것 을 알 게 되 었 습 니 다.delloc 는 여전히 가지 않 습 니 다.제거 방법 을 갔 지만 pop push 에 있 을 때 웹 페이지 는 원래 차지 하 던 메모 리 를 제거 하지 않 았 습 니 다.나중에 발견 되 었 습 니 다.
[userContentController addScriptMessageHandler:self name:GetKeyiOSAndroid_Action];
여기 userContentController 가 self 를 가지 고 있 습 니 다.그리고...userContentController 가 configuration 에 의 해 소지 되 었 습 니 다.
최종 적 으로 웹 뷰 가 가지 고 있 습 니 다.그리고 웹 뷰 는 self 의 개인 변수 입 니 다.
그래서 self 도 self 를 가지 고 있 기 때문에 이 럴 때 반복 적 으로 인용 하 는 문제 가 존재 합 니 다.
팝 이나 dismiss 이후 에 도 메모리 가 존재 합 니 다.풀 려 나 지 않 습 니 다.
지금 두 가지 방법 이 생각 나 네요.
1.위 에서 나 는 self 가 self 를 가지 고 있 기 때문에 발생 하 는 순환 인용 문 제 를 언급 했다.
저 는 WK WebView Configuration 을 다시 만 들 었 습 니 다.
[[WKWebViewConfiguration alloc]init];
userContentController =[[WKUserContentController alloc]init]; configuration.userContentController= userContentController;
webView = [[WKWebView alloc]initWithFrame:self.view.bounds configuration:configuration];
self 방법 을 다시 쓰 면 해결 이 돼 요.2,delloc 메모리,
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[_webView.configuration.userContentController addScriptMessageHandler:self name:GetKeyiOSAndroid_Action];
[_webView.configuration.userContentController addScriptMessageHandler:self name:Upload_Action];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[_webView.configuration.userContentController removeScriptMessageHandlerForName:GetKeyiOSAndroid_Action];
[_webView.configuration.userContentController removeScriptMessageHandlerForName:Upload_Action];
}
이 글:https://www.jb51.net/article/143774.htm 결국 이 문 제 를 해결 했다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WKWebview 비전면 자동 재생 h5 비디오 구현 방법(Swift, OC)WKWebview에서 비디오가 재생되는 h5 페이지를 불러올 때 기본적으로 사용자가 클릭해야 비디오를 재생할 수 있고 비디오가 재생될 때 전체 화면으로 재생됩니다.h5 페이지 영상이 전체 화면이 아닌 자동으로 재생되...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.