2

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

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 类吗?

4

1 回答 1

3

WebView是 的子类NSView。从线程编程指南

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

(强调补充。)

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

于 2012-05-11T17:03:15.123 回答