Objective-C中NSString对象的retainCount

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下无符号长整型的最大值
posted @ 2018-06-27 11:24  半窗疏影  阅读(371)  评论(0编辑  收藏  举报