iOS 9~12에서 WKWebView 초기화 후 참조 개수를 조사했습니다.
https://qiita.com/srea/items/0d935b0bad4509ddbc50
iOS 11에서는 내부의 일부 사양 변경으로 인해 강력하게 참조되는 사양이 됩니다.
이 보도는 iOS 12의 속편에서 그 부분의 규격이 어떠한지 확인했다.
WKWebView 및 UIView를 초기화한 후 웹 등록 정보 대입
인증 코드
import UIKit
import WebKit
final class ViewController: UIViewController {
weak var wkWebView: WKWebView!
weak var uiView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
wkWebView = WKWebView()
print("WebView: \(CFGetRetainCount(wkWebView))")
uiView = UIView()
print("WebView: \(CFGetRetainCount(uiView))")
}
}
"weak 속성이기 때문에 곧 해방될 수 있다"고 밝혔다.
보통 weak 속성을 대입하고 Print 함수로 참조 계수를 얻으면 해방되어 붕괴될 수 있습니다.
그럼 각 OS 버전의 동작을 확인하겠습니다.
어떻게 될까요?
iOS 9.3
무너졌어.정확한 동작입니다.
콘솔 로그(lldb)
iOS 10.3.1
무너졌어.정확한 동작입니다.
콘솔 로그(lldb)
iOS 11.4
무너졌어.그러나 WebView는 아직 해제되지 않은 것 같습니다. 참조 수는 2로 표시됩니다.
콘솔 로그WebView: 2
(lldb)
iOS 12.0
무너졌어.그러나 WebView는 아직 해제되지 않은 것 같습니다. 참조 수는 2로 표시됩니다.
콘솔 로그WebView: 2
(lldb)
결과 비교 표
iOS
12
11
10
9
WKWebView 초기화 시 참조 개수
2
2
0
0
WKWebView의 스토리지 차트 디버깅 기능을 사용하여 스토리지에서 확장된 객체 확인
인증 코드
import UIKit
import WebKit
final class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let webView = WKWebView()
print("WebView: \(CFGetRetainCount(webView))")
}
}
iOS 9.3
WebKit (43)
iOS 10.3.1
WebKit (48)
iOS 11.4
WebKit (53)
iOS 12.0
WebKit (2)
WebKit (55)
총결산
import UIKit
import WebKit
final class ViewController: UIViewController {
weak var wkWebView: WKWebView!
weak var uiView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
wkWebView = WKWebView()
print("WebView: \(CFGetRetainCount(wkWebView))")
uiView = UIView()
print("WebView: \(CFGetRetainCount(uiView))")
}
}
(lldb)
(lldb)
WebView: 2
(lldb)
WebView: 2
(lldb)
인증 코드
import UIKit
import WebKit
final class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let webView = WKWebView()
print("WebView: \(CFGetRetainCount(webView))")
}
}
iOS 9.3
WebKit (43)
iOS 10.3.1
WebKit (48)
iOS 11.4
WebKit (53)
iOS 12.0
WebKit (2)
WebKit (55)
총결산
결론
완전히 한담하다
iOS 12에서 JS를 통해 통신할 수 없는 evaluateJavascript 현상을 확인 중입니다.
조건으로 삼다
- 실제 시스템(Simulator Mobility)
- WKWebView는 JS에서만 사용
- WKWebView가 AddSubview 또는 AddSubview를 실행하지 않은 경우에도 ViewController는 인스턴스 유지에만 사용되며 표시에는 사용되지 않습니다.
이 경우 WKWebView를 프레임 제로 AddSubview로 이동합니다.
Original
Reference
이 문제에 관하여(iOS 9~12에서 WKWebView 초기화 후 참조 개수를 조사했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srea/items/2e00c1020a7725291963
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(iOS 9~12에서 WKWebView 초기화 후 참조 개수를 조사했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/srea/items/2e00c1020a7725291963텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)