我需要使用localizedStandardCompare 对包含NSURL 的NSMutableArray 进行排序:
[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
,但还有其他方法返回 NSString,例如 relativeString。阅读 NSURL 类参考,我觉得 relativeString 可能更快,因为不需要解析 URL,但这是我第一次使用 Cocoa 和 OS-X,因此只是一个疯狂的猜测。
附加限制:在这种情况下,所有 URL 都来自本地存储上的 NSDirectoryEnumerator,因此都是文件 URL。不过,如果该方法适用于所有类型的 URL,那将是一个好处。
我的问题:我应该使用哪种方法将 NSURL 转换为 NSString 以获得最佳性能?
分析所有可能的方法可能是可能的,但我只有一台(相当快的)OS-X 机器,谁知道 - 有一天代码可能最终会出现在 iOS 上。
我在 OS-X 10.8.2 上使用 Xcode 4.5.2,但该程序也应该在旧版本上运行(在合理范围内)。