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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

关于iOS7里的JavaScriptCore framework

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

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

1、什么是JavaScriptCore

前端開發(fā)的同學(xué)應(yīng)該知道,瀏覽器核心模塊主要是渲染引擎和JavaScript引擎兩部分組成。前者用于處理頁面布局,渲染及DOM結(jié)構(gòu)等,后者用于JavaScript的解析、執(zhí)行及DOM交互等。

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


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

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

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

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


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

aObjective-C –> JavaScript?(即在Objective-C語言環(huán)境里執(zhí)行JavaScript代碼段,創(chuàng)建JavaScript變量及變量操作等等)

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

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

4、代碼層具體應(yīng)該怎么使用呢?

a、執(zhí)行JavaScript代碼的方法:首先引入JavaScriptCore.h,然后通過JSContext創(chuàng)建JS運行環(huán)境,再通過evaluateScript來執(zhí)行結(jié)果;


最后要訪問執(zhí)行結(jié)果的話,需要注意數(shù)據(jù)類型的轉(zhuǎn)換,Objective-CJS的對應(yīng)關(guān)系主要如下:

– (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、調(diào)用JS的函數(shù):通過evaluateScript將腳本片段引入到上下文,然后通過callWithArguments進行調(diào)用。


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

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


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

通過在Objective-C中聲明JSExport的數(shù)據(jù)類型,可以直接在JS的語言環(huán)境里當(dāng)作全局變量使用。


創(chuàng)建MyPoint類,MyPoint類實現(xiàn)MyPointExports協(xié)議,然后將MyPoint類的實例注入JS。

示例:

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

context[@"point"] = point;

e、擴展系統(tǒng)已有類到JS

比如將Label的一個實例導(dǎo)出到JS,讓JS設(shè)置Label的text屬性。

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

? ? ? ? ?@protocol MyLabelExportProtocol <JSExport>


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


? ? ? ? ?@end

? ? ? ? ?(2)將此協(xié)議動態(tài)添加到UILabel的Class上:

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

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

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


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

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

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


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

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

6、JavaScriptCore可以帶來了哪些實戰(zhàn)應(yīng)用呢?

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


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

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

轉(zhuǎn)自:http://www.webryan.net/2013/10/about-ios7-javascriptcore-framework/,部分內(nèi)容有更改,內(nèi)容有增加。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。