JSAUIKitCocoa使你可使用JavaScript編寫對性能要求不高但可能變更性很大的iOS應用的業務邏輯部分,View組件、須要多線程支持的Model等則直接使用原生對象。javascript
編寫方式與React Native類似,但你幾乎無需學習除了JavaScript語法之外的任何新知識,由於你是直接使用UILabel、UIView這些類,或你本身編寫的擴展類,而無需再瞭解一套全新的React框架體系。java
JSAUIKitCocoa推薦使用MyLayout進行佈局,JSAUIKitCocoaDemo也將使用MyLayout進行頁面佈局。固然,你也能夠自由選擇你熟悉的佈局框架。配合JSAUIKitCocoa提供的JSAUIViewController,你能夠像使用WEBView同樣從Server或本地加載顯示內容以及交互邏輯:git
建立JSAUIViewController:github
//得到JSAUIViewController使用的JSA4Cocoa上下文環境 JSA4Cocoa* jsa = [JSAUIViewController sharedJSA]; //啓動JSA4Cocoa引擎,該代碼全局只應調用一次,建議放在AppDelegate中進行初始化 [jsa startEngine]; //建立一個JSAUIViewController JSAUIViewController *mainVC = [[JSAUIViewController alloc] initWithJSClass:@"app.Main" Arguments:@[]];
這裏建立的JSAUIViewController就是UIViewController的子類,與你一般編寫一個頁面所建立的UIViewController子類是同樣的,惟一區別是,原來你寫在子類中的代碼,如今可使用JavaScript編寫。objective-c
app.Main的類定義以下:編程
//引入JS父類 $import("jsa.cocoa.JSAUIViewController"); $class("app.Main",{ $extends : "jsa.cocoa.JSAUIViewController", //與RN的render函數相似,這裏返回一個組裝好的UIView對象,該view將被賦值到UIViewController.view屬性 getView : function(viewController){ //使用JSA語法糖函數$new建立MyRelativeLayout對象做爲根視圖以實現自動佈局 this.view = $new("MyRelativeLayout","initWithJSAParam:",{ subviews:[ { //建立UILabel視圖對象 view:$new("UILabel","initWithJSAParam:",{ textAlignment:"center", text:"HelloWorld", sizeToFit:true, }), topPos :{value : "safeAreaMargin",offset : 20}, centerXPos : 0, } ] }); return this.view; } });
上面的代碼將在距頂部(從safeAreaMargin算起)20個點,居中的位置,顯示文字:HelloWorld多線程
固然,你也能夠像寫原生代碼同樣先建立類對象,而後再進行屬性設置,但考慮到JS與原生系統之間的函數調用時間相對較長,所以建議使用構造器函數一次性賦值,同時JSAUIKitCocoa對一些經常使用UI組件編寫了initWithJSAParam:構造器方法,可按上述方式進行組件的初始化。固然,你也能夠編寫符合本身習慣的構造器方法。app
JSAUIKitCocoa展現了一種使用JSAppSugar編寫原生應用業務邏輯的方式,你也可使用JSAppSugar創造你本身的混合編程方式。框架
JSAppSugar同時提供可運行在Android的JSA4Java,你也可使用相似的方式編寫Android應用的業務邏輯,若是你同時爲iOS和Android定義了相同的JS對象映射,則你就能夠實現同時運行在多端的JavaScript業務邏輯代碼。函數