必须始终在主线程上使用Webkit吗?

时间:2012-05-11 16:42:50

标签: multithreading cocoa webkit

我正在尝试在后台渲染网页,但遇到了以下问题

2012-05-11 12:39:02.086 [77207:1c03] An uncaught exception was raised
2012-05-11 12:39:02.087 [77207:1c03] objc_object* -[WebView initWithFrame:frameName:groupName:](WebView*, objc_selector*, CGRect, NSString*, NSString*) was called from a secondary thread

我知道webkit类不是线程安全的,但它们是否也必须始终在主线程中使用?或者,我可以创建一个虚拟Web视图来初始化webkit,然后再使用后台线程中的webkit类吗?

1 个答案:

答案 0 :(得分:3)

WebViewNSView的子类。来自Threading Programming Guide

  

NSView类通常是线程安全的,但有一些例外。 您   应该创建,销毁,调整大小,移动和执行其他操作   NSView对象仅来自应用程序的主线程。绘图   只要你括号绘图,从辅助线程是线程安全的   调用lockFocusIfCanDraw和unlockFocus。

(强调补充。)

我对AppKit WebView的工作方式不太清楚,但我的理解是,在UIKit中,实际上只有一个UIWebView因性能原因而被重用,类似于AppKit中的字段编辑器。如果我的理解是正确的,WebView行为相似,我可以看到你在背景线程方面遇到更大的问题。