Lua&ios dev

14
Lua & IOS dev [email protected]

description

一点皮毛~~

Transcript of Lua&ios dev

Page 1: Lua&ios dev

Lua & IOS dev

[email protected]

Page 2: Lua&ios dev

why script?

Page 3: Lua&ios dev

应付需要及时变更的逻辑

Page 4: Lua&ios dev

各种引擎的得力助手

Page 5: Lua&ios dev

绕过 app sotre 更新软件

Page 6: Lua&ios dev

why lua?

JavascriptCore (private Api)

statically compile:javascriptCore 6M ✖lua 200K ✔

Page 7: Lua&ios dev

优点 :内存占用小,速度快线程独立语言本身易懂

缺点 :语言本身自带的功能太少 , 没有 unicode 字符串支持,没有位运算 ..

Page 8: Lua&ios dev

lua in xxxxxx client

Page 9: Lua&ios dev

Lua 是一门轻量级的嵌入式语言。目前在游戏开发中被大量应用。

本身自带了很少的基本库,并且也是可以选择加载的

luaopen_base(L);luaopen_string(_L);luaopen_math(_L);luaopen_table(_L);

Page 10: Lua&ios dev

Hello Luacat hello.c#include "lua.h"#include "lauxlib.h"

int main (int argc, const char * argv[]){ lua_State *L; L = lua_open();// 创建 lua 运行环境 luaopen_base(L);// 加载基本库 luaL_loadstring(L, “print(‘hello lua’)”); // 加载一段 lua 代码 lua_pcall(L, 0, LUA_MULTRET, 0);// 运行 lua_close(L);// 释放 return 0;}

源代码,有 gcc 即可编译:http://bluehua.org/demo/hello_lua.zip

Page 11: Lua&ios dev

sample codefunction short_url(url) local _,s_pos,e_pos local json = wget("http://xx.xx/s/shorten.json?url=" .. url) print(json) _,s_pos = string.find(json, "\"shortenUrl\":\"") e_pos,_ = string.find(json, "\",\"errorCode") if not s_pos or not e_pos then print("can't find short") return "" end return string.sub(json, s_pos+1, e_pos-1) end

Lua 5.1 参考手册

Page 12: Lua&ios dev

扩展 lua//typedef int (*lua_CFunction) (lua_State *L);// 扩展一个解析 url encode 的方法static int lua_unescape(lua_State *L) { const char *str_raw = luaL_checkstring(L, 1);// 从栈里取出参数 NSString *str = [[NSString alloc]initWithUTF8String:str_raw]; NSString *dstr = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; lua_pushstring(L, [dstr UTF8String]);// 将结果压栈 [str release]; return 1;// 返回函数结果的数目}

//lua 这种简单的 api 设计使得函数支持多参和返回多个结果

// 注册自己扩展的 c 函数lua_register(L, "unescape", lua_unescape);

Page 13: Lua&ios dev

从 lua 里取值

- (NSString *)getStringGlobal:(NSString *)name { lua_getglobal(_L, [name UTF8String]);// 获取一个全局变量,压栈 NSString *rt = nil; if (lua_isstring(_L, -1)) { const char *raw_str = lua_tostring(_L, -1);// 读取字符串 rt = [NSString stringWithUTF8String:raw_str]; } lua_pop(_L, 1);// 从栈上移除 return rt;}

Page 14: Lua&ios dev

end