基于wax的lua IOS插件开发

原创 2013年12月04日 18:36:25

作者:朱克锋

邮箱:zhukefeng@iboxpay.com

转载请注明出处:http://blog.csdn.net/linux_zkf


Objective-C的运行时支持新增类型和方法,但是由于苹果的限制,开发者无法在iOS上动态加载Objective-C原生代码,所以只能寻求替代方案。

脚本语言就可以一定程度上解决这一问题,一般情况下可以使用html+js实现例如支付宝的插件的实现就是用的是html+js技术,也可以基于lua脚本实现,下面介绍wax+lua的实现方式

关于wax请参见下面的连接

Wax项目(http://github.com/probablycorey/wax

当然多数熟悉iOS的开发人员不一定会赞同采用这种开发方式,所以我们在引入Wax的同时希望能够和已有的iOS项目无缝的结合起来,不改变项目使用Objective-C开发的方式,在项目上线后通过Wax来改变程序运行时的行为。这样就可以避免漫长的AppStore上线审核,随时对线上程序进行调整,甚至是修复线上程序的问题或缺陷。


下面是IOS代码,这里是IOS列表的简单的几个接口的实现,其实只是写了一下接口,并没有实现具体的方法,只是为了和lua脚本做个比较

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return20;

}

 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell =[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:@"Cell"];

}

 

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

{

}

 

下面是基于wax的lua代码,看上去和IOS原生方法有很多类似的地方,不过要注意lua特殊的语法格式,下面有风云翻译的lua教程可以参考学习

waxClass{"LIViewController",UITableViewController}

 

function viewDidLoad(self)

   print("viewDidLoad")

end

 

function tableView_numberOfRowsInSection(self, tableView,section)

    return 20;

end

 

function tableView_cellForRowAtIndexPath(self, tableView,indexPath)

      local cell =self:ORIGtableView_cellForRowAtIndexPath(tableView, indexPath)

      cell:textLabel():setText("".. indexPath:row())

      cell:detailTextLabel():setText("TESTDATA LUA  HUHUHU~~~")

      cell:textLabel():setTextColor(UIColor:redColor())

   print("cell num is :" .. indexPath:row())

    --if (1 ==indexPath:row()) then

       --print("OMG---------!!!!!!!")

    --end

      return cell

end

 

function tableView_didDeselectRowAtIndexPath(self,tableView, indexPath)

    print("you selected row num is : "..indexPath:row())

end

 

基于wax的lua使用并不复杂,下面就是一种很简单的实现方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

{

    self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]]autorelease];

    // Override point for customization after applicationlaunch.

    wax_start("init.lua",nil);

    self.viewController = [[LIViewControlleralloc] init];

    self.window.rootViewController =self.viewController;

    [self.windowmakeKeyAndVisible];

    returnYES;

}

 

Lua脚本的编写方式和Objective-C有很多的相似支出,在方法和类名上都和iOS的原生框架保持了一致。iOS开发人员只需要略微了解一下Lua的语法,就可以编写对应的Lua补丁。更多的细节可以参见Wax项目的介绍:https://github.com/probablycorey/wax/wiki/Overview

需要注意的是Wax项目本身不支持方法覆盖和从Objective-C反向调用Lua修改后的实例

lua语法参照

http://www.codingnow.com/2000/download/lua_manual.html


项目代码地址

https://github.com/zhukefeng-ios/LuaIOS


版权声明:本文为博主原创文章,欢迎转载。转载请注明出处http://blog.csdn.net/linux_zkf,朱克锋--大话商学院系列

Ali-Wax使用和源码解析系列-Wax的集成和调试环境搭建

那些多余的话在ios平台的基础框架中,代码的直接动态部署一直是一个无法解决的问题,所以我们只能退而求其次,通过建立脚本语言和OC的bridge来实现动态更新的目标。在这个方向上,wax-lua框架是第...
  • panghuizl
  • panghuizl
  • 2015年11月25日 11:47
  • 2020

Wax 将Lua带人iPhone开发

2011年6月的编程语言排行榜Lua语言一军突起,一举进入前十名。这与一年前苹果决定在iOS系统上使用Lua语言密不可分。但是,你了解如何用Lua语言在iOS上开发应用吗?51CTO将向各位介绍Lua...
  • sadlike
  • sadlike
  • 2014年04月02日 16:21
  • 423

Wax 将Lua带人iPhone开发

2011年6月的编程语言排行榜Lua语言一军突起,一举进入前十名。这与一年前苹果决定在iOS系统上使用Lua语言密不可分。但是,你了解如何用Lua语言在iOS上开发应用吗?51CTO将向各位介绍Lua...
  • smking
  • smking
  • 2013年03月17日 12:50
  • 1128

IOS中如何调用LUA,以及LUA如何调用IOS中的功能

下面将讲解一下如何在iOS里调用Lua函数,以及Lua函数如何调用iOS本地函数。 转载请注明出处。原文出处 http://www.cnblogs.com/winewind/archive/20...
  • xyxjn
  • xyxjn
  • 2013年10月12日 11:53
  • 8608

手动使用C/C++编写Lua扩展插件

最近在研究如何在Windows 下嵌入Lua来完成业务模块编写的时候 发现Lua的一些问题,首先Lua作为一门脚本语言,其灵活性和可扩展性是很高的,要不然Cocos2d-x中也不会嵌入他来编写业务逻辑...
  • yue7603835
  • yue7603835
  • 2014年12月12日 02:04
  • 5886

用Lua开发iphone程序

这两年来随着iphone,ipad在全球的热卖,用于开发ios程序的object-c语言也在编程语言榜上逐节攀升。不过用Object-C开发iphone程序还是不算方便,毕竟它只是一个面向对象的C,并...
  • smking
  • smking
  • 2013年03月17日 12:56
  • 6716

iOS使用lua语言的使用步骤与实现插件的动态更新

一:lua使用步骤:(可参考http://www.duote.com/tech/ios/19919_2.html#contentbody) 用Xcode创建项目   我们先创建一个新项目 ...
  • sun2728
  • sun2728
  • 2015年12月09日 15:56
  • 641

iOS之热修复WaxPatch

迄今为止,脚本语言中运行速度最快的是 Lua。Lua 语言完全使用 ANSI C 实现,其设计精巧,代码优美。Lua 的解释器总共在 200k 大小,而且运行速度大约是 C 语言的 1/5,语法比较简...
  • LVXIANGAN
  • LVXIANGAN
  • 2017年11月06日 15:13
  • 115

Nginx之lua插件开发

1,背景按照项目需求,搭建图片服务器FastDFS,但是,发现上传的图片文件名和需要再次请求的文件名不一致,这样需要重新刷新一下数据库,例如,上传1.jpg,FastDFS会返回a.jpg,然后需要将...
  • san1156
  • san1156
  • 2017年08月03日 21:04
  • 355

VS2015搭建lua开发环境

所以本篇博文介绍在Windows平台下,使用VS2015搭建lua开发环境的一些侥幸成功经验,安装过程参考网上教程,安装过程如下(参考http://www.byjth.com/lua/33.html)...
  • EverRisky
  • EverRisky
  • 2017年03月08日 22:54
  • 1434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于wax的lua IOS插件开发
举报原因:
原因补充:

(最多只允许输入30个字)