NSString不会在源代码的“消隐”之后获得值NSMutableString
问题描述:
这是一个比实际更为理论化的问题;NSString不会在源代码的“消隐”之后获得值NSMutableString
假设我有两个字符串,一个正常的和一个可变的,如果我这样做:
NSMutableString *prova = [[NSMutableString alloc] init];
NSString *prova2 = [[NSString alloc] init];
[prova appendFormat:@"%@",@"CIAO"];
prova2 = prova;
NSLog(@"String: %@",prova);
NSLog(@"String2: %@",prova2);
[prova setString:@""];
NSLog(@"-String: %@",prova);
NSLog(@"-String2: %@",prova2);
那么结果是:
2013-04-22 22:01:53.604 CodeTest[6974:303] String: CIAO
2013-04-22 22:01:53.605 CodeTest[6974:303] String2: CIAO
2013-04-22 22:01:53.605 CodeTest[6974:303] -String:
2013-04-22 22:01:53.606 CodeTest[6974:303] -String2:
它为什么这样的表现? 我只是想找到它,因为我从来没有遇到过这样的事情,而在编程蟒蛇,PHP或C + +(我认为我从来没有面对如此多的不同数据类型在Obj - C:P)
由于
以防万一有人想知道如何克服它这里是我用来赋值到字符串没有“屏蔽”后失去它的正确的代码(sostitute到prova2 = PROVA):
prova2 = [NSString stringWithString:prova];
答
请记住,NSString
和NSMutableString
变量是指针。这意味着当您分配prova2 = prova
时,您确实将prova2
更改为指向prova
,并且您分配给prova2
的值将丢失。
因此,当您将空字符串分配给prova
时,两个变量都指向@""
。
答
prova2 = prova;
这不指定字符串的内容在prova
在字符串中prova2
,它只是使prova2
指向同一个对象prova
,有效地漏是prova2
用来指向字符串。因此,即使prova2
被宣布为NSString*
,它现在也指向NSMutableString
。
好了,你证实了我的怀疑,我认为我有很多事情要了解obj-c。谢谢大家的真正快速的答案:) – Frankie94 2013-04-22 20:25:52
C++也有指针,以相同的方式工作 – 2013-04-23 01:25:18