我有一个简单的问题。如果我如下所示声明 NSString(ref 类型):
NSString *johnsMoney = @"200";
NSString *marysMoney = johnsMoney;
NSLog(@"Johns Money %@",johnsMoney);
NSLog(@"Marys Money %@",marysMoney);
johnsMoney = @"100";
NSLog(@"Johns Money %@",johnsMoney);
NSLog(@"Marys Money %@",marysMoney);
产生的输出是这样的:
Johns Money 200
Marys Money 200
Johns Money 100
Marys Money 200
根据我的理解,当我将 @"100"分配给 johnsMoney 时,它不应该也将 "marysMoney"的值更改为 100,因为 marysMoney 指向 johnsMoney。
更新:
我相信以下示例展示了我最初尝试做的事情:
Dog *dog1 = [[Dog alloc] init];
dog1.name = @"Dog 1";
Dog *dog2 = dog1;
NSLog(@"Dog 1 %@",dog1.name);
NSLog(@"Dog 2 %@",dog2.name);
dog1.name = @"Dog 3";
NSLog(@"Dog 1 %@",dog1.name);
NSLog(@"Dog 2 %@",dog2.name);
最佳答案
johnsMoney
和 marysMoney
都是 pointers to strings .
当您编写 johnsMoney = @"100"
时,它现在指向不同的字符串。这不会更改仍指向原始字符串的 marysMoney
。
如果您使用的是 NSMutableString
,并且您使用了 [johnsMoney setString:@"100"]
,那么它会更改基础数据(两个变量仍会更改为该数据)指向)。
关于Objective-C NSString 引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37200648/