Ios UniChar(来自CFString)和UniChar(来自NSString)是否相同?
我被触发到这个问题是因为我使用了这个答案中NSString的category方法来计算特定字符的出现次数: 通过使用特殊的CFString方法枚举字符串的内容,此方法非常快速。它需要一个UniChar作为参数。为了获得UniChar,我使用了:Ios UniChar(来自CFString)和UniChar(来自NSString)是否相同?,ios,objective-c,nsstring,cfstring,Ios,Objective C,Nsstring,Cfstring,我被触发到这个问题是因为我使用了这个答案中NSString的category方法来计算特定字符的出现次数: 通过使用特殊的CFString方法枚举字符串的内容,此方法非常快速。它需要一个UniChar作为参数。为了获得UniChar,我使用了: unichar semicolon = [@";" characterAtIndex: 0]; 因为我在NSString中找不到任何给我一个UniChar的东西 编译器不会对此抱怨(传递unichar而不是unichar) 这些类型的定义如下: //
unichar semicolon = [@";" characterAtIndex: 0];
因为我在NSString中找不到任何给我一个UniChar的东西
编译器不会对此抱怨(传递unichar而不是unichar)
这些类型的定义如下:
// in MacTypes.h
typedef UInt16 UniChar;
// and:
typedef unsigned short UInt16;
// in NSString.h:
typedef unsigned short unichar;
所以这些类型现在看起来是一样的(iOS 7.1)。但是我们能期待永远都是这样吗?
看到NSInteger在移动到64位时从int变为long,我想确定它们是一样的吗?是的。它们会永远一样吗?谁知道呢。让它们不同肯定会破坏很多代码。只是想澄清一下:“UniChar”和“UniChar”不是Unicode字符。它们是UTF-16组件。就像单个字节是UTF-8组件一样,UniChar和UniChar是UTF-16组件。单个Unicode字符由一到四个UTF-8组件或一到两个UTF-16组件组成
对于ASCII字符,您只需编写
unichar semicolon = ';';
它们是UCS-2字符:)在某种程度上,它是Unicode的同义词,但不再是。然而,出于实际目的,基本多语言环境之外的字符极为罕见。NSString也不是Unicode字符串——它们是unichar的数组length
返回unichars的数量,而不是Unicode代码点的数量。