我试图在后台渲染网页,但遇到了以下麻烦
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 类吗?
WebView
是一个子类NSView
。来自线程编程指南 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html:
NSView 类通常是线程安全的,但也有一些例外。你
应该创建、销毁、调整大小、移动以及执行其他操作
NSView 对象仅来自应用程序的主线程。绘画
只要您将绘图括起来,来自辅助线程的线程就是安全的
调用lockFocusIfCanDraw 和unlockFocus。
(强调是添加的。)
我不太清楚 AppKit 如何WebView
有效,但我的理解是,在 UIKit 中实际上只有一个UIWebView
只是出于性能原因而被重用,类似于 AppKit 中的字段编辑器。如果我的理解是正确的,并且WebView
行为类似,我可以看到您在后台线程方面遇到了更大的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)