日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

关于iOS7里的JavaScriptCore framework

發布時間:2024/7/23 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于iOS7里的JavaScriptCore framework 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS7沸沸揚揚的扁平化論戰之外,WWDC 2013還是公布了很多讓開發者小興奮的點,其中包括多任務加強支持background fetchtransfer,近場通信的AirDropp2p,以及游戲控制器和游戲中心的加強;當然還包括了讓web開發同學很興奮JavaScriptCore了。下面henry/webryan來詳細介紹下整合JavaScriptCore到原生應用的情況。

1、什么是JavaScriptCore

前端開發的同學應該知道,瀏覽器核心模塊主要是渲染引擎和JavaScript引擎兩部分組成。前者用于處理頁面布局,渲染及DOM結構等,后者用于JavaScript的解析、執行及DOM交互等。

JavaScriptCore是一種JavaScript引擎,主要為webkit提供腳本處理能力(其主要以safari瀏覽器為代表)。除此之外,市面上還有注明的JscriptIE, SpiderMonkeyfirefox)和V8chrome)。JavaScriptCore是開源webkit的一部分,它提供了強大的整合能力,有興趣的同學可以到官網下載編譯和測試(http://www.webkit.org/projects/javascript/


2、為什么蘋果要在native應用中(非webview)引入JavaScript

首先,脫離了瀏覽器外殼和繁重的UI布局和渲染的JavaScript引擎,無疑可以將JavaScript的能力更輕便地、高性能地帶給原生的iOS應用,給應用開發者提供更多的想象力(無論是PC還是移動的瀏覽器,UIGUI部分都是最重要的性能瓶頸和優化點)。

其次,在移動開發場景中確實有眾多的開發者對JavaScript有需求。在google上搜索”embed javascript engine ios”可以得到大量的實踐和博文。

再次,蘋果已經在mac上得到很不錯的實踐和反響。引入JavaScriptCore即擴大了SDK能力又討好了開發者,何樂不為呢。


3、引入JavaScriptCore到底包括了哪些能力呢?

aObjective-C –> JavaScript?(即在Objective-C語言環境里執行JavaScript代碼段,創建JavaScript變量及變量操作等等)

bJavaScript –> Objective-C(即在JavaScript語言環境里調用Objective-C公開給JavaScript的方法)

c、內存管理和線程封裝(主要是需要注意引用和線程使用沖突)

4、代碼層具體應該怎么使用呢?

a、執行JavaScript代碼的方法:首先引入JavaScriptCore.h,然后通過JSContext創建JS運行環境,再通過evaluateScript來執行結果;


最后要訪問執行結果的話,需要注意數據類型的轉換,Objective-CJS的對應關系主要如下:

– (BOOL)toBool;

– (double)toDouble;

– (int32_t)toInt32;

– (uint32_t)toUInt32;

– (NSNumber *)toNumber;

– (NSString *)toString;

– (NSDate *)toDate;

– (NSArray *)toArray;

– (NSDictionary *)toDictionary;

– (id)toObject;

– (id)toObjectOfClass:(Class)expectedClass;

b、調用JS的函數:通過evaluateScript將腳本片段引入到上下文,然后通過callWithArguments進行調用。


c、通過JS調用Objective-C的方法1–Blocks(即function方式)

通過在Objective-CJS context直接定義函數,那么在JS語言環境里可以直接使用?makeNSColor函數。


d、通過JS調用Objective-C的方法2–JSExport(即object方式)

通過在Objective-C中聲明JSExport的數據類型,可以直接在JS的語言環境里當作全局變量使用。


創建MyPoint類,MyPoint類實現MyPointExports協議,然后將MyPoint類的實例注入JS。

示例:

MyPoint *point = [[MyPoint alloc] init];

context[@"point"] = point;

e、擴展系統已有類到JS

比如將Label的一個實例導出到JS,讓JS設置Label的text屬性。

(1)首先實現一個協議,將text屬性Export:

? ? ? ? ?@protocol MyLabelExportProtocol <JSExport>


? ? ? ? ?@property(nonatomic,copy)NSString *text;


? ? ? ? ?@end

? ? ? ? ?(2)將此協議動態添加到UILabel的Class上:

? ? ? ? ?class_addProtocol([UILabelclass], @protocol(MyLabelExportProtocol));

? ? ? ? ?(3)將UILabel的一個實例添加至JS上下文:

? ? ? ? ?[contextsetObject:label?forKeyedSubscript:@"label"];


? ? ? ? ?(4)在JS中就可以通過text屬性設置label的顯示值了:

? ? ? ? ?label.text = 'Label顯示值';

OK相信看到這,你已經知道該怎么實現Objective-CJavaScript的相互調用了。其實這里和在瀏覽器中的相互操作是類似的。那么使用過過程中也要注意引用的回收和避免循環引用等問題,否則會導致內存泄露,甚至程序崩潰。這里我就不贅述了。


5、JavaScriptCore怎么和UIWebView連接起來呢?

?JSContext *context = [webviewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

6、JavaScriptCore可以帶來了哪些實戰應用呢?

1、對于類Titanium的應用絕對是一大利好。Titanium就是通過內置JavaScript引擎操作Objective-C提供的能力,以達到通過JavaScript來開發相對高性能的應用(對比phonegap而言)。內置JavaScriptCore可以使類Titanium框架體積得到明顯減小。


2、對于動態更新類需求是非常有幫助的。JavaScript文件對于iOS7+的應用,相當于LuaCocos2d-x的意義,即提供一種動態局部升級和更新的邏輯,大大提高應用的可擴展性。

3、對手機內嵌web模式的新嘗試點,即通過native+JS file的方式取代webview的方式。比如群創建頁面,通過手Q提供基礎的組件能力,通過加載JS文件來渲染生成創建群UI,并且通過HTTPTCP方式更新create.js,即可實現更貼近原生的交互體驗和web的靈活性。

轉自:http://www.webryan.net/2013/10/about-ios7-javascriptcore-framework/,部分內容有更改,內容有增加。

總結

以上是生活随笔為你收集整理的关于iOS7里的JavaScriptCore framework的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。