2017-09-04 61 views
2
 NSString * str1 = @"haha"; 
    NSString * str2 = [str1 copy]; 
    str1 = @"laa"; 
    NSLog(@"str1的地址爲:%p", str1); 
    NSLog(@"str2的地址爲:%p", str2); 
    NSLog(@"str1的值爲:%@", str1); 
    NSLog(@"str2的值爲:%@", str2); 

作爲上面的代碼,它們的內存地址是不同的。但如果我刪除第三行,他們的內存地址是相同的。你能告訴我原因嗎?我已經搜索了很長時間,謝謝爲什麼nstring obj的內存地址與iOS中的複製的地址不同?

+0

已經給出了答案在這個環節。可能會幫助你.. https://stackoverflow.com/questions/7376261/are-nsstrings-stored-on-the-heap-or-on-the-stack-and-what-is-a-good-way-到initi –

回答

1

這是由於最優化。在iOS上,每個唯一的字符串在內存中只存在一次 - 無論您擁有多少引用或創建位置,NSString始終只有一個haha。但在第三行中,您更改了原始字符串,而副本保持不變。因此,你現在有兩個獨特的字符串。