gpt4 book ai didi

ios - 使用不同的内存创建 NSString

转载 作者:可可西里 更新时间:2023-11-01 17:14:18 27 4
gpt4 key购买 nike

我创建了三个字符串,将其数据与方法参数绑定(bind)。但是,我面临的问题是所有三个字符串都共享相同的内存,因此,它显示相同的文本。这是我创建它的方式:

-(void)buildViewsWIithTitle:(NSString*)eventTitle{

NSString *firstStr = @"";
NSString *secondStr = @"";
NSString *thirdStr = @"";

接下来我将标签文本设置为所有这三个字符串。我将它的值设置为:

 thirdStr = [NSString stringWithFormat:@"%@", eventTitle];
secondStr = [NSString stringWithFormat:@"%@", eventTitle]
firstStr = [NSString stringWithFormat:@"%@", eventTitle];

在控制台中,我在创建后立即输出它的内存:

NSLog(@"memory %p , %p , %p", firstStr, secondStr, thirdStr);

memory 0x109af82d8 , 0x109af82d8 , 0x109af82d8

知道如何让它们的内存地址不同吗?

最佳答案

当你对所有 3 个对象使用 NSString,它们不能被改变时,编译器将检查字符串的值,它对所有字符串都是相同的空值。编译器将通过指向相同的内存来优化内存使用。

iOS 编译器优化了对具有相同值的字符串对象的引用(即,它重用它们而不是冗余地分配相同的字符串对象),因此所有三个指针实际上都指向相同的地址。

如果你使用 NSMutableString,它仍然可能指向同一个对象,但是当你尝试改变字符串时,它会被复制到新内存(延迟内存分配)。

如果你想为每个字符串分配不同的内存那么你可以分配内存然后初始化字符串,就像

 NSMutableString *str1 = [[NSMutableString alloc]initWithString:@""]
NSMutableString *str2 = [[NSMutableString alloc]initWithString:@""]
NSMutableString *str3 = [[NSMutableString alloc]initWithString:@""]

但请注意 NSMutableString 是可变的。

关于ios - 使用不同的内存创建 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38438715/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com