1

C++ と C# のバックグラウンドを持っているので、Objective C は初めてです。文字列操作を行う必要があります。キャラクター レベルで操作する必要があるため、各キャラクターの関数呼び出しを行うと非常に遅くなることが懸念されます。たとえば、C/C++ で const char* を使用する場合、インデックス作成は非常に高速です。「charactersAtIndex」などのメソッドのパフォーマンスへの影響を説明するドキュメントはありますか? コンパイラは、このメソッドをインライン化するのに十分スマートですか?

int current = 0;
NSString* str = @"....";//Long string
while (current < str.length && [str characterAtIndex:current] != ';')//function call at each character?
  ++current;
4

1 に答える 1

2

おっしゃる通り、obj-c メソッドの呼び出しは、C++ の仮想呼び出しよりもさらにコストがかかります。

パフォーマンスが気になる場合は、長さを照会し、バッファを割り当て (予想される長さに応じて malloc または alloca)、getCharacters:range: メソッドを呼び出して、文字列内の Unicode 文字の C 配列を取得できます。IBM の ICU ライブラリなどとリンクして個々の文字にアクセスする準備ができていない限り、UTF8String を使用しないでください。

また、NSScanner クラスが役立つ場合もあります。

于 2013-11-01T20:38:05.503 に答える