您有創造了一個「真正的指針」,問題是,聲明:
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'已經是一個指針。 –