NSString对象的retainCount为-1
Objective-C中NSString对象与其他类型的对象在引用计数上存在着不小的差别。对于NSString的对象,不同的创建方式以及不同的字符个数都会影响对象的引用计数。
1)首先,当字符串的个数小于10个的时候,不管采用哪一种创建方式所得到的字符串都不存在引用计数一说
NSMutableArray *ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"];
[str retain];
[ary addObject:str];
NSLog(@"%@-->%zd",str,[str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%@-->%zd",str,[str retainCount]);
[ary removeAllObjects];
2)当字符串的长度大于等于10时,开始产生差别(stringWithString的创建方式与字面量方式是一样的)
NSMutableArray *ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"testatestatestatest"];
[str retain];
[ary addObject:str];
NSLog(@"%@-->%zd",str,[str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%@-->%zd",str,[str retainCount]);
[ary removeAllObjects];
NSLog(@"%@--->%zd",str,[str retainCount]);
3)将%ld占位符换成%lu后,会发现,当字符串的长度小于10个的时候,对象的引用计数是64位OS下无符号长整型的最大值