ios提供了许多初始化函数。可以从字符数组初始化,从C语言字符串初始化,从文件初始化,从网络地址初始化……初始化操作主要功能是将不同编码的字符串转化为unicode编码的字符串。
以下为最基本的4个初始化函数
- (instancetype)initWithCharacters:(const unichar *)characters length:(NSUInteger)length;
根据unicode字符序列初始化字符串
参数characters是unicode字符序列,参数length是字符序列的长度
- (instancetype)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length
freeWhenDone:(BOOL)freeBuffer;
/* "NoCopy" is a hint */
根据unicode字符序列初始化字符串
参数characters是unicode字符序列,参数length是字符序列的长度,参数freeBuffer表示在初始化完成后是否释放字符序列占用的内存。内存释放后不能再使用。
- (nullable instancetype)initWithBytes:(const void *)bytes length:(NSUInteger)len
encoding:(NSStringEncoding)encoding;
根据字符序列初始化字符串
参数bytes是字符序列,参数len是字符序列的长度,参数encoding是字符序列的编码方式。
initWithBytes解码bytes字符序列获取unicode字符序列,若解码失败则返回nil。
- (nullable instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)len
encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)freeBuffer;
根据字符序列初始化字符串
参数bytes是字符序列,参数len是字符序列的长度,参数encoding是字符序列的编码方式,参数freeBuffer表示在初始化完成后是否释放字符序列占用的内存。内存释放后不能再使用。
initWithBytesNoCopy解码bytes字符序列获取unicode字符序列,若解码失败则返回nil。
ios支持的编码格式有
typedef NSUInteger NSStringEncoding;
NS_ENUM(NSStringEncoding) {
NSASCIIStringEncoding = 1, /* 0..127 only */
NSNEXTSTEPStringEncoding = 2,
NSJapaneseEUCStringEncoding = 3,
NSUTF8StringEncoding = 4,
NSISOLatin1StringEncoding = 5,
NSSymbolStringEncoding = 6,
NSNonLossyASCIIStringEncoding = 7,
NSShiftJISStringEncoding = 8,
/* kCFStringEncodingDOSJapanese */
NSISOLatin2StringEncoding = 9,
NSUnicodeStringEncoding = 10,
/* Cyrillic; same as AdobeStandardCyrillic */
NSWindowsCP1252StringEncoding = 12, /* WinLatin1 */
NSWindowsCP1253StringEncoding = 13, /* Greek */
NSWindowsCP1254StringEncoding = 14, /* Turkish */
NSWindowsCP1250StringEncoding = 15, /* WinLatin2 */
NSISO2022JPStringEncoding = 21,
/* ISO 2022 Japanese encoding for e-mail */
NSMacOSRomanStringEncoding =