OC直接呼叫Lua與LuaScriptCore對比

2021-09-28 18:32:05 字數 3066 閱讀 9644

想參考學習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...