2016-07-29 50 views
0

我的Mac OSX應用程序有一個後臺進程,它使用Core Graphics將2D線和區域繪製到CGLayer中。然後通過NSView子類的displayRect()方法定期向用戶顯示。是否需要將讀取/寫入訪問序列化到OSX中的CGLayer?

目前我正在使用GCD隊列來串行化讀取和寫入圖層的任務。這確保後臺進程不會在主線程使用CGContextDrawLayerAtPoint()將其繪製到視圖中的同時進行繪製。不過,這會讓我有些表現。

問題1: R/W的序列化訪問CGLayer是否需要穩定的應用程序? (我不介意奇怪的錯誤顯示的圖像,但我不想冒險崩潰)。

問題2:如果我的繪圖任務分割成幾個併發進程,這將是安全的,讓他們全部寫入層在同一時間或我需要連載他們(這將使沒有意義的併發類)?

回答

0

行,所以已經做了一些測試,我可以說的回答問題(2)爲NO安全,讓兩個不同的進程同時寫入同一個CGLayer

當我嘗試在同一層上同時執行兩個同步動作CGContextFillRect()時,應用程序異常終止,並且使用EXC_BAD_ACCESS() code=1

但是問題(1)的答案是DOES在後臺進程仍在寫入時似乎可以同時讀取CGLayer。例如,這裏是讀取圖層的結果,而後臺進程正在用藍色方塊覆蓋所有紅色方塊。 enter image description here

相關問題