Lua化代码的一种设计模式

将现有代码改写为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做得不足的地方。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Wax Lua是什么? Lua 我就不介绍了,我们都在使用的脚本语言,游戏开发的神器。 而 Wax 就是使用 Lu...
    零纪年阅读 5,338评论 0 2
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 5,251评论 0 3
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 10,498评论 0 13
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,445评论 30 472
  • The Bulk House is a Zero Waste Lifestyle brand | 一个推行零浪费生...
    THE_BULK_HOUSE阅读 6,350评论 0 0

友情链接更多精彩内容