iOS内存管理-你可能不知道的NSString内存管理

本文深入探讨了Objective-C中NSString及NSMutableString实例的内存管理问题,包括不同创建方式下对象的内存地址一致性、存储区域及实际类型等。通过具体代码示例解析,帮助读者理解字符串对象的底层实现。

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

技术之路任重道远,且行且珍惜!
个人认为:提有问题,经过思考和实践,最后分析总结,这样理解的比较深刻。因此按照这个顺序来说一下字符串的相关内存管理的问题!
提出问题
  • aString 和bString的内存地址是否一致?
NSString *aString = @"234";
NSString *bString = @"234";
  • 在Xcode中会有哪些警告提示?
NSString *cString = [NSString stringWithString:@"234"];
NSString *dString = [NSString stringWithString:@"234"];
  • 如下四个变量(aString、bString、cString、dString)的内存地址是否一致?
NSString *aString = @"234";
NSString *bString = @"234";
NSString *cString = [NSString stringWithString:@"234"];
NSString *dString = [NSString stringWithString:@"234"];
  • 如下四个变量(aString、bString、cString、dString)的实际类型是什么类型?你会说NSString吗?
NSString *aString = @"234";
NSString *bString = @"234";
NSString *cString = [NSString stringWithString:@"234"];
NSString *dString = [NSString stringWithString:@"234"];
  • aString 和bString的内存存储区域是哪一块?栈区?堆区?数据区?代码区?
NSString *aString = @"234";
NSString *bString = @"234";
  • 变量eString和fString的内存存储区域是哪一块?栈区?堆区?数据区?代码区?
NSString *eString = [[NSString alloc]initWithString:@"234"];
NSString *fString = [[NSString alloc]initWithString:@"234"];
  • aString 和bString的isa指向什么类型?
NSString *aString = @"234";
NSString *bString = @"234";
  • formatString1、formatString2、nString内存地址是否一致?实际类型是什么?存储区域?
 NSString *formatString1 = [NSString stringWithFormat:@"234"];
 NSString *formatString2 = [NSString stringWithFormat:@"234"];
 NSString *nString = [[NSString alloc]initWithString:@"234"];
  • mString1和mString2的具体类型是什么?内存存储区域是哪一块?isa指向是哪些?
NSMutableString *mString1 = [NSMutableString stringWithString:@"234"];
NSMutableString *mString1 = [NSMutableString stringWithString:@"234"];
  • 看下面的代码
@interface SBObject: NSObject

@property (nonatomic, copy) NSMutableString *str;

@end

@implementation SBObject
- (void)test {
    NSMutableString *formatString3 = [NSMutableString stringWithFormat:@"2345"];
    self.str = formatString3;
    [self.str respondsToSelector:@selector(replaceCharactersInRange:withString:)];
}
@end

试问下面这行代码的结果是YES还是NO?

[self.str respondsToSelector:@selector(replaceCharactersInRange:withString:)];
  • 字符串对象底层有几种类型?

看到的各位朋友可自行试验一下?最近比较忙会陆续将剩下的补充完成?

解答
分析
深究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值