gpt4 book ai didi

objective-c - 为什么变量的行为如此奇怪?

转载 作者:行者123 更新时间:2023-12-03 16:25:39 24 4
gpt4 key购买 nike

我认为 Objective-C 中的变量只是对内存中某处对象的引用。所以根据我的理解,结果一定是“1”,因为最后我将对象的str1的内存地址分配给了str2,而之前我已经分配了str2的内存地址来测试。

NSString *str1 = [NSString stringWithCString:"one"];
NSString *str2 = [NSString stringWithCString:"two"];

test = str2; // test is an instance variable. I use no getter/setter here! just for testing!
str2 = str1;
NSLog(test); // = "two" ??

最佳答案

这就是指针的工作原理。您看到的结果是正常且正确的。

让我们列出所有变量以及它们声明时在内存中指向的字符串:

str1 -> "One"
str2 -> "Two"

然后,执行一些赋值指令:

test = str2;

这会将指针str2的值分配给test。所以指针是

str1 -> "One"
str2 -> "Two"
test -> "Two"

然后

str2 = str1;

将指针str1的值赋给str2。现在指针是

str1 -> "One"
str2 -> "One"
test -> "Two"

然后打印 test,它指向 str2 最初指向的内容,即“Two”。

我认为您认为既然您将 str2 分配给 str1 的值,并将 test 分配给 str2str1 的值以某种方式级联到 test 中。不是这种情况。一旦分配了 test 的值,有关该值来自何处的信息就会丢失。如果您希望 test 的值与 str1 的值相同,则可以颠倒赋值操作的顺序:

str2 = str1;
test = str2;

关于objective-c - 为什么变量的行为如此奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/801959/

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