我的Cocoa應用程序需要同時呈現許多批生成的網頁。由於WebKit WebView呈現僅限於主線程,因此我無法在應用程序的進程中使用GCD來完成此任務,因此我正在考慮使用某種進程間解決方案。使用XPC並行化Cocoa WebView呈現
NSXPCConnection
是明顯的選擇,因爲它與沙箱配合良好,透明地代理了我需要使用的所有Core Foundation類型。但是,它似乎只爲每個服務創建一個進程,這隻會將我的主線程限制移到不同的進程中,並且不會讓我並行化多個呈現請求。有什麼辦法可以說服XPC系統爲同一個服務分叉多個進程,可能使用C API(xpc_connection_create
等)?
在這一點上,我正在考慮製作一打相同的XPCServices
具有不同名稱的包,並將其連接到某個特定批次的並行渲染請求中閒置的那些包,但這看起來很愚蠢。
我正在使用一個類似的設置,你在這裏描述了一個我正在處理的應用程序。但是,我的服務相當不可靠,並且隨機出現一個EXC_BAD_ACCESS頻繁崩潰。它幾乎看起來像WebView並不快樂。我的XPC服務只不過是在主線程上創建WebView的基本服務包裝器,它在加載URL並在完成時返回報告。您是否需要在服務中做任何「特殊」的事情才能使WebView開心?我將RunLoopType更改爲NSRunLoop,並在適當的位置強制主線程。還要別的嗎? – kennyc