Экземпляры WkWebView и утечка памяти - PullRequest
0 голосов
/ 18 октября 2019

Интересно, есть ли способ уменьшить или повторно использовать экземпляры wkwebview, поскольку каждый раз, когда метод реализуется в wkwebview

wkWebView.load(myRequest)

, веб-экземпляр генерируется и остается в памяти, и яможет видеть их все во время отладки с Safari:

enter image description here

Каждый раз, когда отображается одна и та же страница, потребление памяти увеличивается:

enter image description here

Загрузка "about: blank" не решает проблему, а также wkWebView = nil.

1 Ответ

0 голосов
/ 19 октября 2019

После некоторых исследований я обнаружил свою ошибку:

let webConfig = WKWebViewConfiguration()
let userController:WKUserContentController = WKUserContentController()
userController.add(self, name: "interOp")

В viewDidLoad произошла утечка памяти, поскольку этот userController никогда не был выпущен (и для wkwebview также).

Мое решение: объявить WKUserContentController в классе viewController, содержащем ссылку wkWebView:

var userController: WKUserContentController  = WKUserContentController()

на него в viewDidLoad:

userController.add(self, name: "interOp")
webConfig.userContentController = userController;

и освободить его в viewWillDisappear:

userController.removeScriptMessageHandler(forName: "interOp")

Возможно, это не лучший способ справиться с этой проблемой, но он работает. Когда представление будет отклонено, в Safari ничего не останется и освободится память:

enter image description here

...