Lua介绍
-
Lua是什么(Lua程序设计语言是一个简洁、轻量、可扩展的脚本语言。Lua读作/'lua/(噜啊),是葡萄牙语中"Luna"(月亮)的意思。)
-
lua 是一门脚本语言,
-
通常被用作:嵌入式脚本语言使用,为什么:因为Lua的解释器是用标准的c语言编写而成,几乎在所有操作系统和平台上都可以编译,运行。(Python 的底层也是用 C 语言写的)
-
官方API文档:http://www.runoob.com/manual/lua53doc/contents.html#contents
-
Lua语法字典(@zd更深一步的学习语法足够了):http://www.runoob.com/lua/lua-tutorial.html、
-
API中文文档:https://www.codingnow.com/2000/download/lua_manual.html
-
API手册:<http://manual.luaer.cn>
-
sample code:http://lua-users.org/wiki/SampleCode;wiki:http://lua-users.org/wiki/;其他网站:http://lua-users.org
-
-
Lua在iOS中的使用
-
封装第三方框架
- 阿里的wax:https://github.com/alibaba/wax
- LuaScriptCore :https://www.jianshu.com/p/64a3bb99ed5b
-
如何和oc通信,(oc调用Lua、lua调用oc)参考:https://www.jianshu.com/p/4e75bdcfa389
-
LuaViewSDK : https://alibaba.github.io/LuaViewSDK/guide.html
-
-
使用要求
- Lua中只能接受C定义的方法传入,并且方法的声明必须符合lua_CFunction函数指针的定义
-
应用场景
- 利用 Lua 实现 App 动态化方案:http://ios.jobbole.com/85850/
- 热更:https://www.cnblogs.com/dahe007/p/6253204.html
- Debug
其他
- lua编辑器的选择
-
https://www.zhihu.com/question/51484734
- android studio + emmylua(插件)
- 配置:https://emmylua.github.io/index.html
-
https://www.zhihu.com/question/51484734
- c++ 注册 lua方法工具
学习
阅读
- 好文章
- 文章扩展阅读:
- 入门
- c++ 、lua相互调用
- 语法使用lua oc:
- 介绍:https://blog.csdn.net/justinjing0612/article/details/8816678
- 原理:https://blog.csdn.net/vimfung/article/details/53788784
- 其他:http://www.cnblogs.com/flyFreeZn/p/4152881.html
- https://zhuanlan.zhihu.com/p/33825860
- https://zhuanlan.zhihu.com/p/40406096
- Lua 在移动平台上的应用IBM
- https://www.kancloud.cn/digest/luanote/119933
- 入门
工具
- 官方API文档:http://www.runoob.com/manual/lua53doc/contents.html#contents
- Lua语法字典(@zd更深一步的学习语法足够了):
总结
基础的机制与原理
- lua require机制
lua的理解
- lua 只有一种通用数据结构 table
- 由于 lua 的数据结构很简单,所以我们可以认为沙盒中放着一张只有 function 和 table 两种复杂数据类型构成的图。
lua 代码结构及部分理解
文件
- 全局
- 全局变量
- 全局方法
- 本地(local定义的本地变量和方法)
- 本地变量
- 本地方法
- 本地变量-表
- 表的实例方法
- 表的类方法
- return 外部要用到的变量
- 数组 = 表
- 字典 = 表
- 对象 = 表
- 类 = 对象 (没有类的概念只有对象(表),具有clone自身的对象可以看做类)
Lua问题
- lua是编译型还是解释型 :解释型
- 怎么理解local BaseApplication = require "VersionController" (VersionController.lua)
- :和. 分别代表什么意思?前者实例方法可以调用Self,后者静态方法没有Self隐式变量
:如 Application:init_app - Lua 作用域
- 如下代码
- VersionController.lua
技术点
动态更新
- 冷更
- 更新时机:重新进入应用或者插件才会更新
- 具体方法
- 预建设
- 建一个 app版本和脚本版本映射的关系表。
- 脚本版本,如 3.2.1 (主版本号.子版本号.补丁版本号)
- 更新
- 进入应用时检查脚本是否有更新,有更新下载最新脚本,实现动态更新。
- 预建设
-
热更
- 更新时机:应用和插件运行期间也可以更新
- 具体方法
- 预建设(同冷更)
- 目标:针对应用版本和本地脚本的版本需要更新的
- 更新
- 更新时机
- 1、合适时机如应用启动端上请求是否更新;2、服务端通知客户端更新
- 实现,下载更新脚本,修改内存中已经加载过的对象
- 更新时机
-
热更的实现@如何实现,有待验证
- 文章以及三种方案
- 修改全局表_G的方式:https://blog.csdn.net/xufeng0991/article/details/52473602
- (相同的文章不同的排版)http://gad.qq.com/article/detail/37745
- 疑问:upValue怎么办,待测
- upVlaue的方式:http://shahuwang.com/编程语言/Lua%20require机制和热更新.html
- 感觉这种方法可行,待验证
- td_rlua 热更的封装,根据类型、(不同类型、funcation、table),更新整个funcation和table图,同时更新funcation的upValue,
- 暂时理解:递归修改方法中的所有的funcation和table 对 funcation upvalue 进行更新
- 修改全局表_G的方式:https://blog.csdn.net/xufeng0991/article/details/52473602
- 文章以及三种方案
与c++相互通信
移动端使用的安全隐患
继承和多继承的实现
阅读
-
https://zilongshanren.com/blog/2014-07-30-lua-call-cpp-functions.html
http://www.freecls.com/a/2712/102
Lua集成和使用
-
1、下载lua源码:download source code。
-
2、打开src目录,将Makefile、lua.c、luac.c三个文件删除掉(src文件夹下为Lua的源码文件)重命名src为"lua版本号",如lua5.3.5。
-
3、将lua5.3.5文件直接拖拽到xcode中。
-
4、编译会报如下错误。
'system' is unavailable: not available on iOS
- 在源码的luaconf.h文件中添加如下代码,重新编译,即可编译成功。http://lua-users.org/lists/lua-l/2017-09/msg00242.html
#if defined(__APPLE__) #include "TargetConditionals.h" #if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV #define system(s) ((s)==NULL ? 0 : -1) #endif // end iOS #elif defined(__ANDROID__) #define system(s) ((s)==NULL ? 0 : -1) #endif
- 集成参考
- String 表示一个不可变的字节序列。?
开发工具
- ideal
- android studio
- xcode
- subline
网友评论