NSString

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 在当前这个时代(比如说公元2016年),如果你并不是在维护历史遗留的文本处理代码,没有在每个地方都使用Unicod...
    纵横而乐阅读 2,741评论 3 16
  • 转载自ObjeC中国 历史 计算机没法直接处理文本,它只和数字打交道。为了在计算机里用数字表示文本,我们指定了一个...
    玉米包谷阅读 1,139评论 0 4
  • 概述 NSString 及其可变子类 NSMutableString 提供了一组用于处理字符串的 API,包括用于...
    独木舟的木阅读 437评论 0 0
  • NSString的内容好丰富啊,学习了很久很久,也补充了不熟悉的内容。 算法了解 Hash算法: 将任意长度的消息...
    _阿南_阅读 1,118评论 2 0
  • 离开学校已经有多久了,都已经忘了上课的感觉。现在作为兴趣课老师,来得几乎总比学生早。大家的兴趣好像也不稳定,这次很...
    citoyendumonde阅读 171评论 0 0