iOS-DSBridge原理浅析

原理

参考链接github地址

  1. 前端通过WKWebview文本传入传递约定的方法名与参数

    代理方法:runJavaScriptTextInputPanelWithPrompt
    
  2. 原生定义接口类,统一管理api,方法名和参数与前端约定好的
    当前端调用原生时,遍历这个类里的方法,寻找对应方法名并执行

    这里相对于JSBridge:JSBridge是通过注册方法作为缓存,当调用方法时,在缓存信息中查找对应注册的方法名去执行
    DSBridge:DSBridge是通过注册API类,当调用方法时,遍历这个类中的方法名查找对应注册的方法名去执行
    当注册的方法多了之后,每次都会去遍历这个类里的方法,去查找,可能也会存在耗时操作消耗内存问题

  3. 原生通过向前端注入js方式传递信息

    evaluateJavaScript
    

DWKWebview

  1. 继承WKWebView
  2. 实现WKUIDelegate(实际也是WKWebView的UIDelegate)

API支持

  1. loadUrl
  2. callHandler:evaluateJavaScript
  3. addJavascriptObject:注入原生实现的介绍对象,在收到前端消息时通过约定方法名使用runtime(class_copyMethodList)获取缓存原生对象方法列表,在通过消息转发机制实现调用原生

总结

与jSBridge对比
优势:

  1. 没有jsapi提前注入,注入的api接口类
  2. DSBridge在消息传递上采用方法名约定的形式,对比jsbridge是提前注册方法作为缓存,交互方式会相对简单便捷

劣势:

  1. 但正因为是方法名约定的形式,调用时使用runTime的消息转发,在排查定位问题上难度大,不易定位问题
  2. 前端传入的方法参数只能是字符串,数据类型有限制

你可能感兴趣的:(ios,swift,开发语言)