2009-08-19 60 views
5

是否有可能運行一些JavaScript代碼(具有也許是NSString作爲輸入),而無需使用UIWebView?我想在一個單獨的線程中運行這個代碼,所以UIWebView是不可能的,我不想渲染任何東西,只需要返回結果。運行沒有UIWebView的JavaScript可能嗎?

回答

3

我沒有試過,但這裏是一個想法:

編寫代碼來分配一個空UIWebView但不會添加任何地方作爲一個子視圖,而只是直接調用你的JavaScript - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script。然後用NSOperation並行運行。

任何原因,可能不會爲你工作?我認爲它會避免顯示UIWebView的任何內容。作爲一個方面說明,我想不出任何你可以用JavaScript做的事情,你不能在Objective-C中直接做得更快。除了解析你在外部獲得的javascript,這可能被蘋果視爲不可能,具體取決於細節。

猜測你的目標:如果你想解析一個JSON服務器的答覆,我推薦json-framework library hosted on google code。它有一個很好的界面,學習和集成起來非常容易。

+2

這似乎不工作,對於每個UIWebView方法我嘗試調用我得到「bool _WebTryThreadLock(布爾),0xf42930:試圖從主線程或Web線程以外的線程獲取Web鎖。可能是從輔助線程調用UIKit的結果現在崩潰...「 至於我的原因,我主要是在試驗:) – user130444 2009-08-19 21:10:45

+0

除非明確記錄,否則調用除保留之外的任何方法*並不安全*一個UIKit對象。所以我不希望這會有效。 – 2012-04-24 21:39:55

+0

*技術上釋放是線程安全本身,但如果你是最後一個人釋放一個對象,它可能會導致的dealloc要在你的線程,這並不總是安全的運行。 – 2012-04-24 21:40:42

0
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(getResults:) userInfo:nil repeats:YES]; 

-(void)getResults 
{ 
    NSString *value = [self.webView stringByEvaluatingJavaScriptFromString:@"javascript"]; 
} 

任何你不能這樣做的原因。在主線程中不應該有那麼大的開銷。