2

私はいくつかのテキスト分析を行っていますが、最適化する方法が見つからないように見える厄介なパフォーマンスの上昇に遭遇しました。UITextView のテキストから始めて、テキストを文の配列に分割し、".?!" 内の文字で分割します。

次に、各文をループして、文を単語の配列に分割し、文から最初と最後の単語を取り出します。文のテキストの NSRange を使用して、UITextView のテキストの最初と最後の単語の範囲を見つけます。

次の部分は、パフォーマンスの低下に悩まされるところです。これは、最初と最後の単語の境界 CGRect を見つける方法です。

// the from range is increased each iteration 
// so i'm not searching the entirety of the text each pass
NSRange range = [textView.text rangeOfString:firstWord options:kNilOptions range:fromRange];

UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];

firstRect = [textView firstRectForRange:textRange];

これを2 回実行します。最初の単語に 1 回、最後の単語に 1 回です。

これは小さなテキストではうまく機能しますが、5 つ以上の段落に近づくと、Instruments は、UITextView -positionFromPosition: 操作が 492 ミリ秒のクロック時間を消費し、UI と CPU を 100% でロックしていることを示しています。

問題は、文を強調表示する CGPath を作成できるように、最初と最後の単語を囲む CGRect が必要なことです。全体が機能し、見た目は本当に素晴らしいですが、四角形が見つかっている間のハングが私を殺しています. 私はUITextViewの使用にかなり慣れていないので、範囲を使用して検索を最適化するか、何らかの方法で操作をバックグラウンドスレッドに配置するなど、何かできることがあれば、私は大いに義務付けられます.

4

1 に答える 1

1

UITextViewを取るのattributedTextプロパティを使用する方がよいでしょうNSAttributedStringNSBackgroundColorAttributeNameこれにより、 を特定の範囲の色に設定できます。

属性付きテキスト メソッドは iOS 6 以降でのみ機能することに注意してください。

于 2013-05-29T23:27:32.153 に答える