想參考學習luascriptcore的同學可以跳:
下面開始我的表演 ???
首先建立乙個config.lua檔案,裡面簡單寫句**,我是些了乙個顏色,乙個兩數相加的方法
config.lua裡面的**
接下來,匯入標頭檔案
#import "luascriptcore.h"
@property
(nonatomic, strong) lsccontext *context;
我們現在viewdidload裡面實現初始化和加方法的**
-
(void
)viewdidload
執行,看結果:
執行結果
不難看出,lsccontext
初始化並讀取lua檔案用時1.3s
接下來加入改變vc.view顏色的**繼續執行
-
(void
)viewdidload}-
(uicolor *
)colorwithrgbhex:
(uint32)hex
執行之後看結果:
執行結果
依舊是1.3s,然而,對於開發的我們而言,1.3秒不是小數字,每次讀取lua檔案都要花費1.3s的話,那無疑會大幅度的降低使用者體驗。接下來我們放棄luascriptcore
使用lua原生庫來繼續測試。
首先匯入
#import "lua.h"
#import "lauxlib.h"
#import "lualib.h"
@property
(nonatomic) lua_state *state;
接下來
-
(void
)viewdidload
nslog
(@"4");
lua_getglobal
(self
.state,
"backgroundcolor");
uint32 value =
lua_tonumber
(self
.state,-1
);nslog
(@"backgroundcolor = %u",(
unsigned
int)value)
;lua_pop
(self
.state,1)
; uint32 color = value;
self
.view.backgroundcolor =
[self colorwithrgbhex:color]
;nslog
(@"5");
lua_getglobal
(self
.state,
"addfunc");
lua_pushinteger
(self
.state,
1000);
lua_pushinteger
(self
.state,24)
;/*1. 呼叫的
2. 引數數量
3. 返回值的數量
4. 錯誤碼
**/lua_pcall
(self
.state,2,
1,0)
; nsinteger retval =
lua_tonumber
(self
.state,-1
);nslog
(@"retval = %ld"
, retval)
;nslog
(@"end");
}
然後執行看結果
執行結果
不難看出,lua_state
載入庫用時0.003s,讀取lua用時0.0002s,操作lua檔案用時0.0016s 基本忽略不計,同時也能看出不管是獲取方法計算,還是獲取值都沒有耗時。
直接呼叫c api的lua沒有耗時,而呼叫大佬的luascriptcore
時,初始化讀取lua檔案會耗時0.8s - 1.6s (多次測試得出的結論)。
接下來就進入luascriptcore
呼叫檔案的方法去看一看到底是什麼原因造成的耗時:
進入[self.context evalscriptfromfile:@"config.lua"];
方法來一看究竟。
luascriptcore
在初始化的時候,呼叫了
//初始化型別匯出器
self
.exportstypemanager =
[[lscexportstypemanager alloc] initwithcontext:
self
];
點進去看,執行了
//初始化匯出型別
for迴圈
在查詢所需型別時,使用了for迴圈,而迴圈的次數是11888次,那麼造成的耗時是正常的。所以,如果想用oc呼叫lua的同學可以自行修改並使用,也可以直接呼叫原生c
performSelector與直接呼叫的區別
performselector與直接呼叫的區別 1 直接呼叫 delegate image self didfinishwithimage image 2 使用 performselector呼叫 delegate performselector selector image didfinishwi...
lua與C(一) C呼叫lua
lua和c有兩種關係 一種是在lua中呼叫c的函式,c稱為庫 一種是c中呼叫lua,c就稱為應用程式 此時c中包含了lua的直譯器 c 部分 注意在c 中,通常要把lua的一些標頭檔案定義在extern c 中,因為他們是c語言實現的。1.作為應用程式呼叫lua char buffer print ...
Lua與C 呼叫Lua函式(三)
lua允許在乙個文字中定義函式,並且可以通過c語言來呼叫這個函式。先將帶呼叫的函式壓棧,並壓入函式的引數。然後是用lua pcall進行實際呼叫。最後,將呼叫結果從戰中彈出。lua函式 function add x,y return x y end c language double add lua...