NSURL を含む NSMutableArray を localizedStandardCompare でソートする必要があります。
[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *f1 = [(NSURL *)obj1 absoluteString];
NSString *f2 = [(NSURL *)obj2 absoluteString];
return [f1 localizedStandardCompare:f2];
}];
これは問題なく動作しますが、パフォーマンスについて少し心配です。ブロックはソート中に n log n 回評価されるため、高速にしたいと考えています (配列には最大 100,000 要素が含まれる可能性があります)。localizedStandardCompare は NSString でのみ使用できるため、URL を文字列に変換する必要があります。上記では を使用absoluteString
していますが、relativeString など、NSString を返すメソッドは他にもあります。NSURL クラス リファレンスを読むと、URL を解決する必要がないため、relativeString の方が高速であるという印象を受けます。
追加の制約: この場合、すべての URL はローカル ストレージの NSDirectoryEnumerator から取得されるため、すべてファイル URL です。ただし、このメソッドがすべての種類の URL で機能する場合はボーナスです。
私の質問: 最高のパフォーマンスを得るには、NSURL を NSString に変換するためにどの方法を使用する必要がありますか?
考えられるすべての方法をプロファイリングすることは可能かもしれませんが、私は (かなり高速な) OS-X マシンを 1 台しか持っていません。
OS-X 10.8.2 で Xcode 4.5.2 を使用していますが、プログラムは古いバージョンでも (妥当な範囲内で) 動作するはずです。