2009-05-03 19 views
0

我正在研究iPhone的實時語法熒光筆,並且創建了一個自定義的UIView,它接受一個字符串,解析它,然後在其drawRect:方法中突出顯示它。我也實現了一個閃爍的光標。但是,它開始有點慢,我認爲當我實現多線處理和塊處理時,它會減慢速度。但是,我嘗試將[formattedTextView setNeedsDisplayInRect:]調用放在我的視圖控制器中的一個函數中,然後使用[self performSelectorInBackground:@selector(updateDisplay) withObject:nil]調用單獨的線程。現在鍵盤的響應速度更快,但這似乎是單核處理器上線程的糟糕用法。多線程文本處理的成本/收益

做這樣的事情有沒有問題?

感謝

回答

1

正如你指出你自己,在單個處理器的多線程不會帶來巨大的性能提升,但配備了穩定性和複雜性的懲罰。

在即時語法着色是一個很難的問題,與possibilites釀優化:

  • 你對整個文本應用了一堆的正則表達式的? (壞)還是你解析文本要在一個有效的數據結構像ast?
  • 您是否將彩色繪畫限制在可見區域?
+0

我最終刪除了後臺處理,因爲如果連續快速輸入很多字符會導致延遲。 至於你的其他要點: - 我正在應用正則表達式到當前可編輯的行。 - 我只通過調用setNeedsDisplayInRect更新當前行:,UIView的其餘部分保持着色。 在我看來,減速的主要原因是閃爍的光標(在awakeFromNib中設置CABasicAnimation的CALayer)有什麼方法來優化這個動畫? 另外,什麼是ast?我以前沒有聽說過,我正在使用NSMutableArray。 – Kyle 2009-05-03 17:33:20

0

我在實時語法高亮

工作你做關鍵字高亮或者你寫了一個BNF解析器?

對於後者,爲什麼不讓它在一個線程中運行; GUI只顯示迄今已解碼的所有內容的着色。這樣你即時更新,但延遲着色。

+0

我正在用正則表達式來做關鍵字高亮,一個實際的解析器會很好,但我不確定我能寫一個。 謝謝, Kyle – Kyle 2009-05-03 17:35:45