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