NSString 字符串
NSString 类和它的可变的子类 NSMutableString 提供了一些了API来处理字符串,包括合并、搜索、修改字符串方法。NSString 对象的使用贯穿整个 Foundation 框架和其他的 Cocoa 框架,作为文字和语言功能的基石服务于整个平台。
Overview 概要
NSString 和它的 Core Foundation 里的搭档 CFStringRef 可以自由转换,查阅“Toll-Free Bridging” 了解更多信息。
String Objects 字符串对象
一个 NSString 对象用 Unicode 标准来编码文本字符串,它被表示成一个 UTF–16 的代码单元序列。所有的长度、字符索引、范围在16位平台以字节值表示,索引从0开始。
一个 NSString 对象可以与C语言缓存、NSData对象或者 NSURL 内容进行相互转换。NSString对象也能编解码为 ASCII, UTF–8, UTF–16, UTF–32 或者其他的任何被 NSStringEncoding 编码表示的字符串。
Note
一个不可变的字符串是一个在创建的时候被定义的文本字符串,以后不能够被改变。一个不可变的字符是被实现为一个以 UTF-16 为编码单元的数组(换句话说,是一个文本字符串)。要创建和管理一个不可变字符串,使用 NSString 类。要创建和管理可变字符串,使用 NSMutableString 。
使用 NSString 和 NSMutableString 创建的对象被称为字符串对象(或者在没有歧义的情况下,直接称为字符串)。术语 C 字符串被称为标准的 char * 类型。由于类聚簇的原因,字符串对象并不是 NSString 和 NSMutableString 类的真正的实例,而是他们的私有子类的其中的一个实例。尽管一个字符串对象的类是私有的,但它的接口是公有的,这些接口被声明在它们的抽象父类 NSString 和 NSMutableString 中。字符串类遵守了 NSCopying 和 NSMutableCopying 协议,使得我们能够方便地将字符串从一种类型转换成另一种类型。
对以 UTF-16 编码的数据的理解
当从一个以 UTF-16 编码的字符串来创建 NSString 对象时,如果字节顺序没有另作说明的话,NSString 假定 UTF-16 字符是高位编址(big-endian)编码顺序,除非有字节顺序标记(byte-order mark,BOM),在这种情况下,BOM决定了编码顺序。当从一个 unichar 值的数组创建 NSString 对象时,返回的字符串总是 native-endian,因为以本地字节顺序的话数组总是包含 UTF-16 代码单元。
Subclassing Notes 子类注意事项
有可能你会继承 NSString(或者 NSMutableString),但是要做到这些你需要提供字符串(它没有被子类继承)的存储设备并且实现两个主要的方法。抽象类 NSString 和 NSMutableString 是类簇的公有接口,这个类簇包含了大多数的私有的具体的类,这些类创建并且返回一个适合给定情况的字符串对象。你自己实现这个簇的子类来满足特定的需求(在这里有讨论:Methods to Override)。
Understanding Characters 对字符的理解
一个字符串对象以 UTF–16 代码单元序列来展现自己。你可以通过 length 方法来获取一个字符串包含多少 UTF–16 代码单元,通过 characterAtIndex: 方法获取指定的 UTF–16 代码单元。这两个“主要的”方法提供了对一个字符串对象的基本的访问。
然而,使用字符串更多的情况是更高水平的,将字符串看作是单独的实体:比较两个字符串,查找子串,合并为新字符串,等等。如果你想一个一个字符访问字符串,你必须理解 Unicode 字符编码,特别是和字符序列组成相关的问题。更多详情请参考 The Unicode Standard, Version 4.0(The Unicode Consortium, Boston: Addison-Wesley, 2003, ISBN 0-321-18578-1) and the Unicode Consortium web site:http://www.unicode.org/. See alsoCharacters and Grapheme ClustersinString Programming Guide.
本地化字符串比较基于排序规则算法(Unicode Collation Algorithm),和一个被通用区域数据仓库(Common Locale Data Repository)量身定做的不同的语言。两者都是统一编码组织(Unicode Consortium)的项目。Unicode 是被 Unicode 公司注册的商标。
原文链接:https://developer.apple.com/documentation/foundation/nsstring
网友评论