基于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,朱克锋--大话商学院系列

相关文章推荐

阿里云 OCR身份证识别Api 使用(一)

最近项目更新使用拍照识别身份证功能,为了省去用户手动输入身份证号码信息等。 从网上搜了一些方案,发现阿里云的非常便宜,果断采用。 但是没有android 的官方案例 ,只能自己搞了。 首选OCR 识别...

wax lua 脚本升级练习(1)

当发现线上app某一功能出现bug,即使在技术上很快的做出了这一bug的补丁,但是因为AppStore上线审核漫长,这将在一段时间里,用户用的都是这个款带有已知bug的产品。 这种情况的一个解决办法...

开发"愤怒的小鸟"的Lua语言:Wax框架详解

摘要:我们都知道Objective-C和Cocoa语言可以开发iOS应用,但是一年前,苹果决定在iOS系统上使用Lua语言。Wax框架的想法很简单:凡是Objective-C能做的,Lua也能做!考虑...

开发愤怒的小鸟的Lua语言:Wax框架详解

我们都知道Objective-C和Cocoa语言可以开发iOS应用,但是一年前,苹果决定在iOS系统上使用Lua语言。Wax框架的想法很简单:凡是Objective-C能做的,Lua也能做!考虑使用像...
  • Mac_cm
  • Mac_cm
  • 2011-12-19 17:50
  • 2929

开发愤怒的小鸟的Lua语言:Wax框架详解

我们都知道Objective-C和Cocoa语言可以开发iOS应用,但是一年前,苹果决定在iOS系统上使用Lua语言。Wax框架的想法很简单:凡是Objective-C能做的,Lua也能做!考虑使用像...

Nginx之lua插件开发

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

PhoneGap入门 iOS 插件开发

老师让研究一下PhoneGap。看一下iOS 和HTML CSS javascript的混合开发。研究了两天,搞出来点东西来记录一下。 PhoneGap是什么?PhoneGap是一个开源的开发框架。它...

IOS下Phonegap 插件开发

用上一节我们创建的Hello 项目来示例 http://www.mwebgl.com/dede/a/kaifakuangjia/Phonegapjishuwendang/2012/0511/12...

iOS8扩展插件开发配置

WWDC14除了发布了OS X v10.10和switf外,iOS8.0也开始变得更加开放了。说到开放,当然要数应用扩展(App Extension)了。
  • phunxm
  • phunxm
  • 2015-01-14 20:07
  • 21838

HBuilder插件开发IOS遇EXC_BAD_ACCESS错误

最近在搞IOS版的HBuilder离线打包,需要增加一个功能插件。开发环境XCODE 8.3,从别人的代码里找到需要的功能,进行移植。但是在别的项目里正常的代码,移植到Hbuilder里sdk中做成插...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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