После некоторых исследований я обнаружил свою ошибку:
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 ничего не останется и освободится память: