【iOS】字符串

个人笔记备忘,记录日常经常忽略的小知识:NSString 内存知识总结管理


字符串初始化方式分为三类:
1.后面带withString类型

此种方式创建出来的字符串在常量区 __NSCFConstantString,一旦创建不能进行释放,copy和retain针对的是字符串本身;
如果__NSCFConstantString字符串内存一致,不论怎么创建,地址都一样;系统对此做了优化

如:
NSString * __weak s2 =[[NSString alloc] initWithString:@"222"];
NSString * __weak s3 = [NSString stringWithString:@"33"];

2.直接使用字面量@“”创建

此种方式创建出来的同1,在常量区 __NSCFConstantString

如:
NSString * __weak s1 = @"111"

3.后面带withFormat的

此种方式创建分两种情况:a.字符串长度 >9 字符串类型是__NSCFString,可正常被内存管理机制管理;b.字符串长度 <=9 字符串类型是NSTaggedPointerString, 值直接存储在指针中,值也不会销毁;

如:
NSString * s1 = [NSString stringWithFormat:@"123456789"]; // NSTaggedPointerString
NSString * s3 = [[NSString alloc] initWithFormat:@"1234567890"] // __NSCFString


参考:
NSString备忘
深入理解Tagged Pointer

你可能感兴趣的:(【iOS】字符串)