我正在尝试在后台渲染网页,但遇到了以下问题
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类吗?
答案 0 :(得分:3)
WebView
是NSView
的子类。来自Threading Programming Guide:
NSView类通常是线程安全的,但有一些例外。 您 应该创建,销毁,调整大小,移动和执行其他操作 NSView对象仅来自应用程序的主线程。绘图 只要你括号绘图,从辅助线程是线程安全的 调用lockFocusIfCanDraw和unlockFocus。
(强调补充。)
我对AppKit WebView
的工作方式不太清楚,但我的理解是,在UIKit中,实际上只有一个UIWebView
因性能原因而被重用,类似于AppKit中的字段编辑器。如果我的理解是正确的,WebView
行为相似,我可以看到你在背景线程方面遇到更大的问题。