欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于Lua的iOS客戶端功能動態(tài)更新的方法

文檔序號:6621874閱讀:1653來源:國知局
一種基于Lua的iOS客戶端功能動態(tài)更新的方法
【專利摘要】本發(fā)明公開了一種基于Lua的iOS客戶端功能動態(tài)更新的方法,包括以下步驟:A、將用Lua腳本語言編寫的業(yè)務(wù)邏輯代碼放置在服務(wù)端的指定位置,同時在服務(wù)端配置相關(guān)客戶端App代碼模塊的版本號;B、客戶端啟動運行時,通過訪問服務(wù)端、查詢相關(guān)App代碼模塊的版本號,根據(jù)版本號下載需要更新的Lua腳本業(yè)務(wù)邏輯代碼;C、當客戶端執(zhí)行到App代碼模塊時,通過LuaCAPI動態(tài)地加載已經(jīng)下載好的Lua腳本業(yè)務(wù)邏輯代碼,并通過已經(jīng)集成到客戶端程序中的Lua解析器和橋接器來解析執(zhí)行所述Lua腳本業(yè)務(wù)邏輯代碼,以達到動態(tài)更新的目的。
【專利說明】-種基于Lua的iOS客戶端功能動態(tài)更新的方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及i〇S客戶端,尤其是一種基于Lua的iOS客戶端功能動態(tài)更新的方法。

【背景技術(shù)】
[0002] 對于一個已經(jīng)上線蘋果商店的App,當開發(fā)者需要對客戶端進行更新時,最傳統(tǒng)的 做法是將重新編譯生成的完整的App提交到蘋果商店,等待蘋果商店的審核,當審核通過 后,用戶可以重新下載安裝App以達到更新的目的。
[0003] 由于iOS平臺限制了不允許以動態(tài)的方式加載由原生代碼編譯生成的可執(zhí)行程 序,意味著開發(fā)者不可以以動態(tài)鏈接庫的方式來組織App的軟件架構(gòu),也就意味著不可以 通過單獨更新動態(tài)鏈接庫來完成對客戶端App的更新。
[0004] 如果采用傳統(tǒng)的方式更新客戶端,由于從提交給蘋果商店審核到審核通過往往需 要耗費較長的等待時間,導致我們的更新版本不能迅速地傳遞到客戶的移動設(shè)備上,用戶 也需要重新下載安裝整個客戶端App。
[0005] -種與本發(fā)明相近的實現(xiàn)方案是基于Javascript腳本語言和內(nèi)置于iOS的 WebKit框架的Web App,通過WebKit下載和解析執(zhí)行Javascript腳本代碼,同樣可以達到 動態(tài)更新客戶端功能的目的。
[0006] 如果客戶端是做成基于Javascript和WebKit的Web App的方式,更新客戶端 不需要經(jīng)過審核,非常便捷,用戶也無需重新下載安裝整個App,但Web App的運行依賴于 WebKit,受Javascript解析庫的執(zhí)行性能的影響,使得用戶體驗與原生App相比存在一定 差距。
[0007] 名詞解釋: Lua :由標準C編寫而成的腳本語言,在所有操作系統(tǒng)和平臺上都可以編譯,運行;Lua 是一種嵌入式腳本語言,即Lua不是可以單獨運行的程序,在實際應(yīng)用中,通過Lua提供的 C API完成C/C++代碼兩種語言之間的通信的; iOS :蘋果移動設(shè)備操作系統(tǒng); App :應(yīng)用軟件; JavaScript :是一種基于對象和事件驅(qū)動并具有相對安全性的客戶端腳本語言。同時 也是一種廣泛用于客戶端Web開發(fā)的腳本語言,常用來給HTML (標準通用標記語言的子集) 網(wǎng)頁添加動態(tài)功能,比如響應(yīng)用戶的各種操作; WebKit是開源的Web瀏覽器引擎,蘋果的Safari、谷歌的Chrome瀏覽器都是基于這 個框架來開發(fā)的。WebKit還支持移動設(shè)備和手機,包括iPhone和Android手機都是使用 WebKit做為瀏覽器的核心。


【發(fā)明內(nèi)容】

[0008] 針對上述缺點,本發(fā)明提出一種基于Lua的iOS客戶端功能動態(tài)更新的方法,既 可以達到客戶端在無需提交審核的情況下及時更新的目的,用戶也無需重新下載安裝一次 App,同時能夠保持良好的用戶體驗。
[0009] 本發(fā)明采用的技術(shù)方案是: 一種基于Lua的iOS客戶端功能動態(tài)更新的方法,包括以下步驟: A、 將用Lua腳本語言編寫的業(yè)務(wù)邏輯代碼放置在服務(wù)端的指定位置,同時在服務(wù)端配 置相關(guān)客戶端App代碼模塊的版本號; B、 客戶端啟動運行時,通過訪問服務(wù)端、查詢相關(guān)App代碼模塊的版本號,根據(jù)版本號 下載需要更新的Lua腳本業(yè)務(wù)邏輯代碼; C、 當客戶端執(zhí)行到App代碼模塊時,通過Lua C API動態(tài)地加載已經(jīng)下載好的Lua腳 本業(yè)務(wù)邏輯代碼,并通過已經(jīng)集成到客戶端程序中的Lua解析器來解析執(zhí)行所述Lua腳本 業(yè)務(wù)邏輯代碼,以達到動態(tài)更新的目的。
[0010] 作為本方案的進一步改進,其還包括一橋接器,該橋接器用于轉(zhuǎn)換Lua解析器不 能解析的代碼。
[0011] 具體的,所述橋接器包括標識Ob ject-c類對象和實例對象的userdata結(jié)構(gòu),該結(jié) 構(gòu)作為Lua中的userdata數(shù)據(jù)類型存在,該結(jié)構(gòu)中存放著指向Object-C對象的指針和其 他標識信息,與對象相關(guān)的操作基本上在這個結(jié)構(gòu)的基礎(chǔ)上完成。
[0012] 進一步的,所述橋接器將與Object-C對象對應(yīng)的userdata結(jié)構(gòu)以key-value對 的方式存放在兩個映射表中,其中key為userdata結(jié)構(gòu)中的Object-C對象的指針,value 為userdata結(jié)構(gòu)。
[0013] 所述兩個映射表中,其中一個表是弱表,存儲了在Lua層面創(chuàng)建的0bject-c對象 的弱引用;另一個表是用于保存在橋接器層面創(chuàng)建的Object-C對象,是一個強引用表。
[0014] 其中,所述橋接器包括Object-C類對象的創(chuàng)建、為一個類注冊新方法以及對方法 的調(diào)用。
[0015] 進一步的,所述0bject-C類對象的創(chuàng)建包括:在Lua元函數(shù)中通過定義的類名稱 字符串和〇bject-C的運行時API創(chuàng)建一個類,并構(gòu)造 Lua可以識別的userdata類型的結(jié) 構(gòu),再將該userdata結(jié)構(gòu)放入上述的兩個映射表中。
[0016] 上述為一個類注冊新方法的過程為:通過Object-C的運行時API給一個類注冊新 的方法,該運行時API為class_addMethod,該class_addMethod接收一個IMP類型的函數(shù) 指針,該函數(shù)指針指向這個新方法的實現(xiàn)。
[0017] 所述方法調(diào)用的過程為:在橋接器的元方法index里將方法的調(diào)用作為一個閉包 壓入Lua當前維護的堆棧中,在元方法newindex中進行方法的覆蓋。
[0018] 所述方法調(diào)用在閉包中是完成〇b ject-c層面的事情,先從Lua中獲取當前調(diào)用的 方法的名稱,由方法名稱通過〇bject-C的運行時API_sel_getUid獲取到已注冊的方法名 稱對應(yīng)的方法標識-SEL,再根據(jù)方法標識由0bject-C層面的API生成NSMethodSignature 對象,然后由NSMethodSignature對象構(gòu)造 NSInvocation對象,最后由NSInvocation對象 完成方法的調(diào)用。
[0019] 本發(fā)明的有益效果: 本發(fā)明可以快速地迭代更新客戶端,用戶無需重新下載安裝App,在大多數(shù)情況下,更 新腳本量不會很大,更新過程不會影響用戶的使用體驗,最重要是Lua腳本解析器具有優(yōu) 秀的性能,使得客戶端App能夠保持良好的用戶體驗。

【專利附圖】

【附圖說明】
[0020] 下面結(jié)合附圖對本發(fā)明的【具體實施方式】做進一步的說明。
[0021] 圖1是本發(fā)明的系統(tǒng)架構(gòu)圖; 圖2是本發(fā)明的動態(tài)更新方法流程圖。

【具體實施方式】
[0022] 本技術(shù)方案基于以下技術(shù)基礎(chǔ): 1. Lua的設(shè)計理念是可以使它粘合其他的開發(fā)語言,它提供了一系列的Lua C API,根 據(jù)其規(guī)范,我們可以編寫一系列的元函數(shù),作為Lua與其他語言編寫的應(yīng)用程序的粘合代 碼。
[0023] 2. Object-C作為一種動態(tài)語言,提供了運行時豐富的API,提供了根據(jù)類名稱來 動態(tài)反射類對象、根據(jù)方法名稱來動態(tài)綁定方法等特性。
[0024] 3. Object-C可以方便地于C混合編程,為粘合代碼的編寫提供支持。
[0025] 如圖1-圖2所示,為本發(fā)明的一種基于Lua的iOS客戶端功能動態(tài)更新的系統(tǒng)及 方法,該方法包括以下步驟: A、 將用Lua腳本語言編寫的業(yè)務(wù)邏輯代碼放置在服務(wù)端的指定位置,同時在服務(wù)端配 置相關(guān)客戶端App代碼模塊的版本號; B、 客戶端啟動運行時,通過訪問服務(wù)端、查詢相關(guān)App代碼模塊的版本號,根據(jù)版本號 下載需要更新的Lua腳本業(yè)務(wù)邏輯代碼; C、 當客戶端執(zhí)行到App代碼模塊時,通過Lua C API動態(tài)地加載已經(jīng)下載好的Lua腳 本業(yè)務(wù)邏輯代碼,并通過已經(jīng)集成到客戶端程序中的Lua解析器和橋接器來解析執(zhí)行所述 Lua腳本業(yè)務(wù)邏輯代碼,該橋接器用于轉(zhuǎn)換Lua解析器不能解析的代碼,以達到動態(tài)更新的 目的。
[0026] 下面針對上述步驟C展開闡述其實現(xiàn)方式: 橋接器主要維護了標識〇b ject-C類對象和實例對象的userdata結(jié)構(gòu),該結(jié)構(gòu)作為Lua 中的userdata數(shù)據(jù)類型存在。該結(jié)構(gòu)中存放著指向Object-C對象的指針和其他標識信息, 與對象相關(guān)的操作基本上都是在這個結(jié)構(gòu)的基礎(chǔ)上完成。
[0027] 橋接器將上述與0bject-C對象對應(yīng)的userdata結(jié)構(gòu)以key-value對的方式存放 在兩個表中,其中key為userdata結(jié)構(gòu)中的0bject-C對象的指針,value為userdata結(jié) 構(gòu)。其中一個表是弱表,存儲了在Lua層面創(chuàng)建的0bject-C對象的弱引用,當對象不再使 用時會調(diào)用橋接器編寫的_gc這個元方法來銷毀對象。另一個表是用于保存在橋接器層 面創(chuàng)建的Object-C對象,是一個強引用表,需要手動管理內(nèi)存,框架運行時通過一個定時 器不停地輪詢這個表中的對象的引用計數(shù),如果小于2,就會銷毀對象。
[0028] 如前面所述,我們可以編寫一系列的元函數(shù),作為Lua與Object-C的粘合代碼, 其中最核心的是在粘合代碼中實現(xiàn)Object-C類、對象的創(chuàng)建以及對方法的調(diào)用。
[0029] 1. 0bject-C類對象的創(chuàng)建: 為了創(chuàng)建Object-C類對象,可以在Lua元函數(shù)中通過定義的類名稱字符串和Object-C 的運行時API(objc_getClass)創(chuàng)建一個類,并構(gòu)造 Lua可以識別的userdata類型的結(jié)構(gòu), 再將該userdata結(jié)構(gòu)放入上述的兩個映射表中。
[0030] 2.為一個類注冊新方法 通過〇bject-C的運行時API (class_addMethod)給一個類注冊新的方法,class_ addMethod接收一個IMP類型的函數(shù)指針,該函數(shù)指針指向這個新方法的實現(xiàn)。在Lua和 Ob ject-C的橋接器中,MP函數(shù)包含了用戶在Lua層面寫的方法,也包括這個方法的參數(shù)和 返回值在ObjC與Lua中的相互轉(zhuǎn)換。也就是當調(diào)用一個Lua寫的方法時會先把參數(shù)轉(zhuǎn)化 為Lua可識別的數(shù)據(jù)類型,然后由Lua C API中的lua_pcall函數(shù)調(diào)用Lua方法,執(zhí)行完成 后再把返回結(jié)果轉(zhuǎn)換成ObjC類型。
[0031] 3.方法的調(diào)用 在橋接器的元方法_index里將方法的調(diào)用作為一個閉包(closure)壓入Lua當前維 護的堆棧中,在元方法_newindex中進行方法的override。在closure中主要是完成ObjC 層面的事情,先從Lua中獲取當前調(diào)用的方法的名稱,由方法名稱通過0bject-C的運行 時API (Sel_getUid)獲取到已注冊的方法名稱對應(yīng)的方法標識(SEL),再根據(jù)方法標識由 ObjC層面的API生成NSMethodSignature(NSMethodSignature存儲了該方法的參數(shù)類型、 數(shù)量和返回值類型)。然后由NSMethodSignature構(gòu)造 NSInvocation,最后由NSInvocation 完成方法的調(diào)用。
[0032] 以上所述僅為本發(fā)明的優(yōu)先實施方式,本發(fā)明并不限定于上述實施方式,只要以 基本相同手段實現(xiàn)本發(fā)明目的的技術(shù)方案都屬于本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1. 一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在于包括以下步驟: A、 將用Lua腳本語言編寫的業(yè)務(wù)邏輯代碼放置在服務(wù)端的指定位置,同時在服務(wù)端配 置相關(guān)客戶端App代碼模塊的版本號; B、 客戶端啟動運行時,通過訪問服務(wù)端、查詢相關(guān)App代碼模塊的版本號,根據(jù)版本號 下載需要更新的Lua腳本業(yè)務(wù)邏輯代碼; C、 當客戶端執(zhí)行到App代碼模塊時,通過Lua C API動態(tài)地加載已經(jīng)下載好的Lua腳 本業(yè)務(wù)邏輯代碼,并通過已經(jīng)集成到客戶端程序中的Lua解析器來解析執(zhí)行所述Lua腳本 業(yè)務(wù)邏輯代碼,以達到動態(tài)更新的目的。
2. 根據(jù)權(quán)利要求1所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在 于:其還包括一橋接器,該橋接器用于轉(zhuǎn)換Lua解析器不能解析的代碼。
3. 根據(jù)權(quán)利要求2所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在 于:所述橋接器包括標識〇bject-C類對象和實例對象的userdata結(jié)構(gòu),該結(jié)構(gòu)作為Lua 中的userdata數(shù)據(jù)類型存在,該結(jié)構(gòu)中存放著指向Ob ject-C對象的指針和其他標識信息, 與對象相關(guān)的操作基本上在這個結(jié)構(gòu)的基礎(chǔ)上完成。
4. 根據(jù)權(quán)利要求3所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在 于:所述橋接器將與〇b ject-C對象對應(yīng)的userdata結(jié)構(gòu)以key-value對的方式存放在兩 個映射表中,其中key為userdata結(jié)構(gòu)中的Ob ject-C對象的指針,value為userdata結(jié) 構(gòu)。
5. 根據(jù)權(quán)利要求4所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在 于:所述兩個映射表中,其中一個表是弱表,存儲了在Lua層面創(chuàng)建的Object-C對象的弱 引用;另一個表是用于保存在橋接器層面創(chuàng)建的〇b ject-C對象,是一個強引用表。
6. 根據(jù)權(quán)利要求5所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在 于:所述橋接器包括Object-C類對象的創(chuàng)建、為一個類注冊新方法以及對方法的調(diào)用。
7. 根據(jù)權(quán)利要求6所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征 在于:所述Object-C類對象的創(chuàng)建包括:在Lua元函數(shù)中通過定義的類名稱字符串和 Object-C的運行時API創(chuàng)建一個類,并構(gòu)造 Lua可以識別的userdata類型的結(jié)構(gòu),再將該 userdata結(jié)構(gòu)放入上述的兩個映射表中。
8. 根據(jù)權(quán)利要求6所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在 于:上述為一個類注冊新方法的過程為:通過〇b ject-C的運行時API給一個類注冊新的 方法,該運行時API為class_addMethod,該class_addMethod接收一個IMP類型的函數(shù)指 針,該函數(shù)指針指向這個新方法的實現(xiàn)。
9. 根據(jù)權(quán)利要求6所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征在 于:所述方法調(diào)用的過程為:在橋接器的元方法index里將方法的調(diào)用作為一個閉包壓入 Lua當前維護的堆棧中,在元方法newindex中進行方法的覆蓋。
10. 根據(jù)權(quán)利要求9所述的一種基于Lua的iOS客戶端功能動態(tài)更新的方法,其特征 在于:所述方法調(diào)用在閉包中是完成Object-C層面的事情,先從Lua中獲取當前調(diào)用的 方法的名稱,由方法名稱通過〇bject-C的運行時API_sel_getUid獲取到已注冊的方法名 稱對應(yīng)的方法標識-SEL,再根據(jù)方法標識由Object-C層面的API生成NSMethodSignature 對象,然后由NSMethodSignature對象構(gòu)造 NSInvocation對象,最后由NSInvocation對象 完成方法的調(diào)用。
【文檔編號】G06F9/445GK104111855SQ201410367963
【公開日】2014年10月22日 申請日期:2014年7月29日 優(yōu)先權(quán)日:2014年7月29日
【發(fā)明者】余敬龍 申請人:廣東能龍教育股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
郧西县| 孟村| 水富县| 曲周县| 行唐县| 济宁市| 南投县| 浏阳市| 巴塘县| 名山县| 伊吾县| 郑州市| 平顺县| 丰都县| 教育| 彭州市| 沐川县| 湄潭县| 沭阳县| 贵南县| 北川| 北辰区| 长白| 莱西市| 开远市| 神农架林区| 鹿邑县| 油尖旺区| 马边| 庄河市| 仪陇县| 德江县| 名山县| 长顺县| 乐业县| 龙泉市| 泰安市| 广州市| 蓝山县| 宁德市| 彰武县|