蠟是什麽?
Wax for iPhone是壹個框架,旨在將Lua腳本語言與本機Objective-C應用程序編程接口(API)結合起來。這意味著您可以使用Lua中的任何和所有Objective-C類和框架。
從技術上講,Wax將Objective-C類與本機C代碼結合在壹起。Lua語言嵌入C語言,然後Objective-C類融入其中。
為什麽要用蠟?
Wax是免費和開源的。與其他壹些基於Lua的移動開發解決方案不同,Wax是壹個開源框架,只需要妳花壹點時間就可以入門,而且不需要妳花錢。不喜歡Wax的工作方式,或者發現實現上的缺陷?源代碼是免費的,您可以隨時更改源代碼以滿足自己的需求。
您可以使用本機API。這意味著為教學Objective-C編寫的課程可以很容易地由Lua為Wax修改和編寫。這也意味著您的應用程序看起來和感覺上總是像本機應用程序,但它的優勢是通過用Lua(壹種高效的腳本語言)編寫代碼來節省時間。
可以用Xcode。這意味著模擬器和設備部署很容易,不會輕易與未來的iOS版本中斷。
您可以使用所有現有的Objective-C庫。如果妳有壹個之前編寫的Objective-C類,妳可以在Lua中使用它而不用修改它——只需要把它放在Xcode中。Three20等圖書館也是如此。只要按照正常的指令添加庫,就可以使用Lua代碼訪問它們。
可以使用Wax Lua模塊。Wax內置了幾個Lua模塊,這使得異步HTTP請求和JavaScript對象註釋(JSON)創建/解析變得非常容易和快速(因為這些模塊是用C編寫的)。
不需要管理內存。不再需要擔心內存分配和其他事務。Wax為您處理所有這些。
Lua類型會自動轉換成相應的Objective-C類型,反之亦然。這意味著如果妳調用壹個需要NSString和NSInteger的方法,但是傳遞了Lua string和Lua integer,Wax會為妳做轉換。這種轉換非常強大,甚至可以處理復雜的Objective-C特性,比如選擇器。
您可以利用上述所有功能。妳不需要有選擇性。妳得到了所有的功能!
#p#副標題#e#
好,太好了!我如何安裝蠟?
首先妳需要Xcode和iPhone SDK。如果妳沒有這些東西,馬上去弄壹個!
使用Xcode創建項目
我們先創建壹個新的“基於Windows的項目”,名為“WaxApplication”。不要忘記將設備設置為iPhone:
通過Finder瀏覽到您存儲項目的文件夾。創建三個新文件夾:wax、scripts和Classes。您的文件夾應該如下所示:
凝固蠟(第壹部分,處理文件)
首先,下載源代碼的壓縮包。Wax放在GitHub上,很容易下載源代碼。從這裏下載壓縮包。
現在,解壓妳剛剛下載的文件。瀏覽到您剛剛解壓縮的文件夾。它會有壹個類似“大概是Corey-wax-124Ca46”的名字。
您的屏幕現在應該看起來像這樣:
現在,執行以下操作:
◆復制lib和bin文件夾,粘貼到WaxApplication項目文件夾下的wax文件夾中。
◆將xcode-template/classes/protocol loader . h復制到WaxApplication項目文件夾中。
◆復制xcode-template/scripts/文件夾,放入WaxApplication項目文件夾。
◆打開WaxApplication項目文件夾中的wax/lib/extensions/文件夾。刪除SQLite和xml文件夾,如下圖所示:
您的屏幕應該是這樣的:
凝固蠟(第二部分,配置項目)
現在使用Finder選擇類、腳本和wax文件夾,並將它們拖到Xcode項目中。把它們放在寫著“蠟應用”和“1目標,iOS SDK X.X”的欄下。不要選中顯示“將項目復制到目標組的文件夾中(如果需要)”的復選框。單擊完成。
現在點擊顯示“Wax應用”和“1目標,iOS SDK 4.3”的欄。然後采取以下步驟:
◆在右窗格中,找到“目標”的標題,然後單擊“WaxApplication”。單擊“構建階段”選項卡。單擊“復制捆綁包資源”清除所有lua文件。
◆在右下角,先點擊“添加構建階段”,再點擊“添加運行腳本”。
◆將Shell設置為/bin/zsh。
◆將外殼下的文本區域設置為“$ project _ dir/wax/lib/build-scripts/copy-scripts . sh”。
您的屏幕現在看起來像這樣:
改變主要的
在左窗格中,打開名為WaxApplication的文件夾。接下來,打開支持文件文件夾。然後,打開main.m,將文件內容更改為以下內容:
//這就是奇跡發生的地方!//Wax不使用nib文件加載主視圖。壹切都在AppDelegate.lua文件中完成# importuikit/ui kit . h # import " wax . h " # import " wax _ http . h " # import " wax _ JSON . h " # import " wax _ file system . h " int main(int argc,char * argv[]){ nsautoeleasepool * pool =[[nsautoeleasepoolalloc]init];wax_start("AppDelegate.lua ",luaopen_wax_http,luaopen_wax_json,luaopen_wax_filesystem,nil);intretVal = UIApplicationMain(argc,argv,nil,@ " app delegate ");【pool release】;returnretVal}
不要忘記保存文件!
刪除不必要的文件
刪除MainWindow.xib、WaxApplicationAppDelegate.h、waxapplicationappdelegate.m三個文件,打開“wax application/supporting files/wax alliance-info . plist”,然後刪除key為“主nib文件庫名”的那壹行。
#p#副標題#e#
測試安裝的蠟。
按(Command+Enter)或左上角的“運行”在模擬器中運行應用程序。如果壹切順利,您將看到壹個簡單的應用程序說“Hello Lua!”。
如果您沒有看到此消息,請檢查前面的步驟,看看是否有任何步驟遺漏。
查看Lua
展開腳本文件夾並打開AppDelegate.lua,您將看到運行應用程序的lua代碼。
妳可能會註意到,首先沒有語法突出。可惜我還沒有找到Xcode中Lua語法高亮問題的穩定解決方案(如果有,請留言告訴我!)。
接下來,您可能會註意到沒有方括號,但是使用了像UIScreen和UIWindow這樣的類。那是因為妳在用Lua構建AppDelegate類;根據蘋果和蘋果的代碼,妳在用Objective-C,在建Objective-C類!
方法名稱
妳可能還註意到了奇怪的方法名“colorWithRed _ green _ blue _ alpha blue _ alpha”。如果您熟悉Objective-C,您會知道方法名可以有冒號。Lua中的函數名不能有冒號。為了彌補這種差異,Objective-C中所有分隔方法名的地方都在Lua中加了下劃線。例如:
Objective-C中的ColorWithRed:green:blue:alpha blue:alpha對應Lua中的ColorWithRed _ green _ blue _ alpha blue _ alpha。
Objective-C中的selectrowatindexpath:animated:scroll position:對應Lua中的selectrowatindexpath _ animated _ scroll position。
面向對象模型
Lua的另壹個問題是它沒有Objective-C那樣的繼承系統,Lua中沒有類。為了克服這個問題,Wax突出了壹個放在每個Wax Lua文件前面的函數:waxClass。在默認的AppDelegate.lua中,這壹行如下所示:
waxClass{"AppDelegate ",protocols = { " UIApplicationDelegate " } }
如果想通過Lua創建Objective-C類,應該使用函數waxclass {"classname "," parent _ class"}。您添加到Lua文件(在同壹個文件中)的所有後續函數將作為實例方法自動添加到新類中。
AppDelegate.lua的這壹行顯示了您還可以定義您的“類”定義了哪些協議。
雖然waxClass解決了定義objective-c可以使用的類的問題,但是仍然存在壹個問題:因為Lua沒有類,所以它沒有Objective-C那樣的動態“self”變量,為了克服這個問題,Wax自動將每個方法的第壹個變量作為該類的當前實例。妳可以發現,在AppDelegate.lua中查看“applicationDidFinishLaunching”時,第壹個變量是“from”變量,盡管這個方法的Objective-C版本只有1個變量。但是,如果妳必須把類的當前實例作為每個方法的第壹個變量發送,那就非常煩人了,所以妳加了壹些語法上的糖。而不是使用“.”運算符在Lua中進行“方法”調用,使用“:”運算符:
local view = ui view . initwithframe(CG rect(0,0,100,100))
-以下內容完全相同
視圖:添加子視圖(someView)
另壹個值得壹提的重要方面是,Wax不支持Objective-C屬性。Wax強制Lua和Objective-C只接觸方法。
-那不行。
someView.frame
-您需要改用getter/setter方法。
view:frame()some view:set frame(some frame)
僅用於Lua的變量。
您可以使用點運算符為任何Objective-C對象創建成員變量。與冒號:操作符(用於調用Objective-C類/實例上的方法)不同,點。operator可以為對象的Lua方面動態創建成員變量(對象的Objective-C方面對這些變量壹無所知)。成員變量可以在對象的整個生命周期中使用。
輸出到控制臺
AppDelegate.lua還展示了如何編寫調試文本並將其輸出到控制臺。您可以使用“puts”功能。
內存管理
我之前說過,有了Lua,妳根本不需要分配、預留和釋放內存。在調用任何初始化器之前,不需要調用內存分配。事實上,如果這樣做,程序可能會出現內存泄漏。
幹得好!下壹步做什麽?
您已經深入了解了專門針對Wax的Lua基礎知識,並且已經準備好編寫iPhone應用程序了!
在本教程的第二部分,我們將用幾行Lua代碼編寫壹個帶有刷新按鈕的Twitter示例應用程序。
看完這個教程,妳有信心打造自己的憤怒的小鳥嗎?
技巧
Lua編程語言是壹種簡單、輕量級和可擴展的腳本語言。Lua讀作/'lua/ (Lu Ah),在葡萄牙語中是“Luna”(月亮)的意思。
Lua是壹種輕量級語言,它的正式版本只包括壹個簡化的核心和最基本的庫。這使得Lua體積小,啟動快。它是用標準C語言編寫的,以源代碼的形式開放。編譯後只有100 K多,可以輕松嵌入其他程序。不像很多“大而全”的語言,默認不提供網絡通信和圖形界面。但是Lua很容易擴展:這些函數是由宿主語言(通常是C或C++)提供的,Lua可以像使用內置函數壹樣使用它們。其實有很多成熟的擴展模塊可以選擇。
Lua的目標是成為壹種可以輕松嵌入其他語言的語言。大多數程序員也認為它確實做到了這壹點。
許多應用程序使用Lua作為自己的嵌入式腳本語言來實現可配置性和可擴展性。其中包括《奧德賽2》、《仙境傳說》、《魔獸世界》、《戰錘40k》、《博德之門》、《軒轅劍》等。移動領域最著名的是《憤怒的小鳥》。
#p#副標題#e#