美文网首页
Lua化代码的一种设计模式

Lua化代码的一种设计模式

作者: 偶是星爷 | 来源:发表于2016-01-26 20:15 被阅读505次

将现有代码改写为Lua,是减少安装包大小的方式之一。目前最多实现方案是,用Lua实现一个完全相同的类替换原生代码。比如一个ViewController,在Lua中也实现这个类,
OC层则通过预编译宏来选择是否用OC代码或Lua代码。更进一步,通过将一些变量作为参数传递到Lua层,把与该类相关的所以操作都在插件中实现,比如set property、push等。

上面的这种做法,将省代码做到了极限。当然缺点也很明显,如果该类用的地方很多,预编译的宏可能会写多次。另外,由于没有OC的接口,别的地方使用该类的对象的接口时,必须先强制转换。因此我们选择了一种更为友好的实现方式——继承+工厂方法。如图所示:

              +---------------------+
              |   ViewController    |
              +---------------------+
              |                     |
Objective-C   | @property id var    |
              |                     |
              +---------------------+
              |                     |
              | +(void)foo          |
              | +(instance)create +-------+
              |                     |     |
              +----------+----------+     |
                         ^                |
                        +-+               |
                         |                |
                         |                |
                         |                |
              +----------+----------+     |
              |                     |     |
Wax           |  LuaViewController  +<----+
              |                     |
              +---------------------+

之所以这样做,主要是基于以下3个方面考虑

  1. 收敛对象构造。提供工厂方法主要是为了降低外部对Lua的感知,外部统一用create工厂方法获取实例,内部可以随时用宏控制编译的代码。
  2. 保留methord/property。因为从Lua得到的对象都是id类型,通过继承能很好的保留这些接口信息。体积方面,method可以只声明不实现,property可以用@dyanmic。
  3. 部分OC不Lua。Wax这个框架主要是利用反射机制与OC Runtime通信,调用并不高效。C/C++的函数不能调用,对结构体支持比较弱。不排除框架本身也有Bug。通过继承,就能灵活规避这些不利因素,把性能相关的部分交给父类实现。

鱼和熊掌不能兼得。这种半Lua的方式,即使空壳的父类还是占了一定的体积(根据属性和偏继承不同,OC层的代码一般1k左右)。只适用于OC和Lua混用的较多,和规避Wax做得不足的地方。

相关文章

  • Lua化代码的一种设计模式

    将现有代码改写为Lua,是减少安装包大小的方式之一。目前最多实现方案是,用Lua实现一个完全相同的类替换原生代码。...

  • python自动化笔试面试题(附带答案)

    一、问答题 1、自动化代码中,用到了哪些设计模式? 答:自动化代码用到过的设计模式: ①单例设计模式 ②工厂模式 ...

  • iOS设计模式

    使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • 在iOS中理解设计模式

    设计模式即编码的工程化,是代码设计经验的总结。使用设计模式可提高代码的复用性、可读性和可靠性。设计模式在各类面向对...

  • 2018-03-16

    自动化之Page object设计模式 Page Object 设计模式的优点如下: 1、减少代码的重复; 2、...

  • MVC、MVP和MVVM

    MVC MVC设计模式,主要是将逻辑代码,视图层代码,以及数据层代码分离的一种设计模式 M->Model(模型):...

  • go Lua 基础教程

    Lua是什么? “Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用...

  • redis中使用lua脚本的好处

    什么是lua? Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程...

  • nginx的lua模块安装

    1 什么是lua? Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放。设计目的是为了嵌入应用程...

网友评论

      本文标题:Lua化代码的一种设计模式

      本文链接:https://www.haomeiwen.com/subject/snuchttx.html