前言
在 Objective-C 的 Foundation 框架中 NSString 对象是很复杂的存在,使用了抽象工厂模式,因此 NSString 其实是多个类簇组合成的抽象类,不同的创建方式以及不同的字符长度都可能影响最终得到的类簇类型,今天就来研究一下 NSString 下复杂的类簇。
为了观察 NSString 的内存管理情况,选择关闭 ARC 使用 MRC 来进行测试,以观察其引用计数等状况。
#define SSLog(_var) ({ NSString *name = @#_var; NSLog(@"\n%@ : %@ : %@ -> %p : %lu", name, _var, [_var class], _var, [_var retainCount]); })
1、直接赋值创建
NSString *str = @"";
NSString *str1 = @"11";
NSString *str2 = @"2222";
NSString *str3 = @"333333333";
NSString *str4 = @"4444444444444444";
NSString *str5 = @"sfsdfnsdfn";
NSString *str6 = @"打算多久但是";
log:
str : : __NSCFConstantString -> 0x100729550 : 18446744073709551615
str1 : 11 : __NSCFConstantString -> 0x100729570