记录一次对NSString和NSMutableString的引用计数操作

本文通过实例演示了在MRC模式下,NSString和NSMutableString的引用计数行为。分析了不同类型的字符串在栈和堆上的表现,并解释了它们的生命周期管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一次对NSString和NSMutableString的引用计数操作

先将项目变成MRC模式(target->build Settings)

这里写图片描述

加入下面代码

这里写图片描述

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *str0 = [[NSString alloc] init];
    NSMutableString *mStr0 = [[NSMutableString alloc] init];
    NSLog(@"%ld<>%ld",[str0 retainCount],[mStr0 retainCount]); //-1<>1
    NSString *str1 = @"abc";
    NSLog(@"%ld",[str1 retainCount]);//-1
    [str1 retain];
    NSLog(@"%ld",[str1 retainCount]);//-1
    [str1 release];
    NSLog(@"%ld",[str1 retainCount]);//-1
    self.str2 = str1;
    NSLog(@"%ld",[self.str2 retainCount]);//-1
    NSMutableString *str3 = [NSMutableString stringWithFormat:@"%@ccc",str1];
    NSLog(@"str3 = %ld,str4 = %ld",[str3 retainCount],[self.str4 retainCount]);//str3 = 1,str4 = 0
    self.str4 = str3;
    NSLog(@"str3 = %ld,str4 = %ld",[str3 retainCount],[self.str4 retainCount]);//str3 = 2,str4 = 2
    [str3 retain];
    NSLog(@"str3 = %ld,str4 = %ld",[str3 retainCount],[self.str4 retainCount]);//str3 = 3,str4 = 3
}
结论

这里写图片描述

分析
  • NSString是在栈中,栈中变量的生命周期由系统管理,所以对它进行操作是 -1;
  • NSMutableString是在堆中分配内存,retainCount表示有多少根强引用线引用着这个对象,当为 0 的时候就回收。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值