为何NSString的localizedStandardCompare:方法会返回不同结果?
macOS 14 下
localizedStandardCompare: 的异常行为 测试代码
#include <Cocoa/Cocoa.h> int main() { printf("%ld\n%ld\n", [@"A 2" localizedStandardCompare:@"a 10"], [@"A 2" localizedStandardCompare:@"a 10"]); }
编译运行及输出
$ clang++ ./cmp.m -o cmp -ObjC -framework Foundation && ./cmp -1 1
异常现象
在 macOS 14 系统中,无论搭配 Xcode 15 还是 16 版本,运行上述代码都会出现异常:
- 首次调用
localizedStandardCompare:时返回正确结果-1(符合自然排序逻辑,"A 2" 小于 "a 10") - 第二次及后续调用该方法时,错误返回
1,判定 "A 2" 大于 "a 10",且该错误结果会持续保持
环境对比测试结果
在旧版系统中该方法行为符合预期,例如 macOS 10.15/Xcode 12 环境下,两次调用均返回 -1。
多环境测试验证问题仅出现在 macOS 14 系统中,各组合测试结果如下:
macos-12, xcode-14.2: -1 -1 macos-13, xcode-14.2: -1 -1 macos-12, xcode-13.1: -1 -1 macos-13, xcode-14.3.1: -1 -1 macos-14, xcode-16b6: -1 1 macos-14, xcode-15.4: -1 1 macos-14, xcode-14.3.1: -1 1
内容的提问来源于stack exchange,提问作者Migun
相关产品推荐
相关产品推荐

