您有创造了一个“真正的指针”,问题是,声明:
test2 = @"What the?";
是创建一个新的字符串对象并将指向新字符串的指针分配给变量test2
,test
仍包含旧指针。
你可以创建一个指针来解决这个问题。或者,您可以使用NSMutableString
,然后仅使用NSMutableString
方法更改(变更)该字符串,而不是将新值重新分配给test
和test2
变量。
以下将是NSMutableString
版本的例子:
NSString *test2 = [[NSMutableString alloc] initWithString:@"yo"];
NSString *test = test2;
NSLog(@"test: %@ test2: %@", test, test2);
[test2 setString:@"what the?"];
NSLog(@"test: %@ test2: %@", test, test2);
它产生的输出:
2012-11-14 10:06:27.231 Untitled 2[592:707] test: yo test2: yo
2012-11-14 10:06:27.232 Untitled 2[592:707] test: what the? test2: what the?
NSString
■找在Objective-C,使一些额外的语法糖以下两者具有相同的效果(尽管在后台发生的情况可能完全不同或相同)。
NSString *test = [NSString alloc] initWithString:@"Hello World"];
NSString *test = @"Hello World";
这两个语句都会创建一个新的不可变(不可更改)字符串。使用语句[NSString alloc] init]
创建NSString
会创建一个空字符串,这通常不是您想要执行的操作。
这意味着,在您的示例,其中前两行是:
NSString*test2=[[NSString alloc]init];
[email protected]"yo";
第一行是不必要的,因为要创建一个字符串对象,并把该指针在test2
,然后立即重写该指针带有指向由@"yo"
创建的字符串的指针。如果您不使用ARC,则会导致内存泄漏,因为由[[NSString alloc] init]
创建的字符串尚未发布。然而,NSString
并没有真正的工作同其他对象,因此而不是内存泄漏,它可能会更正确的说你是在浪费内存”
您需要使用指针指针,因为'test'已经是一个指针。 –