[iOS]解决使用WKScriptMessageHandler与JS交互时的内存泄露问题

在使用WKScriptMessageHandler与JS交互的时候会引起内存泄露, 为了解决此问题, 简单进行了封装, 代码不多, 直接给出:

//
//  LQ.swift
//  WKWebTest
//
//  Created by Artron_LQQ on 2017/11/28.
//  Copyright © 2017年 Artup. All rights reserved.
//
/*
 解决使用 WKUserContentController 实例时的内存泄露问题:
 将
 let user = WKUserContentController()
 // 向js中注入协议, 作为ios和js交互的依据
 user.add(self, name: "appProtocol")
 
 改为:
 let user = WKUserContentController()
 // 向js中注入协议, 作为ios和js交互的依据
 user.add(LQScriptMessage.init(self), name: "appProtocol")
 
 或者使用方法
 user.addHandler(self, name: "appProtocol")
 即可!
 */


import UIKit
import WebKit

class LQScriptMessage: NSObject, WKScriptMessageHandler {

    weak var delegate: WKScriptMessageHandler?
    
    init(_ delegate: WKScriptMessageHandler) {
        super.init()
        
        self.delegate = delegate
    }
    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        
        self.delegate?.userContentController(userContentController, didReceive: message)
    }
}

extension WKUserContentController {
    func addHandler(_ message: Any, name: String) {
        if let msg = message as? WKScriptMessageHandler {
            self.add(LQScriptMessage(msg), name: name)
        }
    }
}

使用的时候也很简单, 只需要将原先的使用方式:

let user = WKUserContentController()
 // 向js中注入协议, 作为ios和js交互的依据
 user.add(self, name: "appProtocol")

替换为:

 let user = WKUserContentController()
 // 向js中注入协议, 作为ios和js交互的依据
 user.add(LQScriptMessage.init(self), name: "appProtocol")

或者直接使用WKUserContentController扩展里的自定义方法:

 let user = WKUserContentController()
 // 向js中注入协议, 作为ios和js交互的依据
 user.addHandler(self, name: "appProtocol")

即可!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,665评论 7 249
  • 借我能说得出口的旦旦誓言 借我十年 借我亡命天涯的勇敢 借我说得出口的旦旦誓言 借我孤绝如初见 借我不惧碾压的鲜活...
    北在北方她阅读 4,483评论 0 0
  • 西西说 :是不是我们住的高就可以摸到月亮了。月亮是用奶酪做的。 我:是呀,你想不想尝一尝月亮的味道呢? 西西:不要...
    May137阅读 1,469评论 0 0
  • 2017.03.19. 晨8:30醒 前面记不清了,不知道是去什么地方培训。然后大家都住在那里上课,有一些熟人和...
    嫏嬛素素阅读 1,404评论 1 0