NSString *str1 = @"str1";
NSString *str2 = str1;
NSLog(@"指針地址:str1:%p str2:%p",&str1,&str2);
// 輸出:指針地址:str1:0x7ffee8fa80f8 str2:0x7ffee8fa80f0
NSLog(@"指針指向的內(nèi)存地址:str1:%p str2:%p",str1,str2);
// 輸出:指針指向的內(nèi)存地址:str1:0x106c57188 str2:0x106c57188
NSLog(@"內(nèi)存中的內(nèi)容:str1:%@ str2:%@",str1,str2);
// 輸出:內(nèi)存中的內(nèi)容:str1:str1 str2:str1
NSLog(@"內(nèi)存塊中的16進(jìn)制內(nèi)容:str1:%X str2:%X",str1,str2);
// 輸出:內(nèi)存塊中的16進(jìn)制內(nèi)容:str1:6C57188 str2:6C57188
// 總結(jié):兩個(gè)不同的指針指向了同一塊內(nèi)存
NSString *str3 = [str1 copy];
// 以上代碼為淺拷貝逢防,str1和str3兩個(gè)不同的指針指向了同一塊內(nèi)存
NSString *str4 = [str1 mutableCopy];
// 以上代碼為深拷貝,str1和str4兩個(gè)不同的指針指向了不同的內(nèi)存
NSMutableString *str1 = [@"st1" mutableCopy];
NSMutableString *str2 = str1;
[str1 appendString:@"__str"];
[str1 appendString:@"__str2"];
NSLog(@"指針地址:str1:%p str2:%p",&str1,&str2);
// 輸出:指針地址:str1:0x7ffee0cb70f8 str2:0x7ffee0cb70f0
NSLog(@"指針指向的內(nèi)存地址:str1:%p str2:%p",str1,str2);
// 輸出:指針指向的內(nèi)存地址:str1:0x604000240720 str2:0x604000240720
NSLog(@"內(nèi)存中的內(nèi)容:str1:%@ str2:%@",str1,str2);
// 輸出:內(nèi)存中的內(nèi)容:str1:st1__str__str2 str2:st1__str__str2
NSLog(@"內(nèi)存塊中的16進(jìn)制內(nèi)容:str1:%X str2:%X",str1,str2);
// 輸出:內(nèi)存塊中的16進(jìn)制內(nèi)容:str1:5F5F0 str2:5F5F0
// 總結(jié):兩個(gè)不同的指針指向了同一塊內(nèi)存
NSString *str3 = [str1 copy];
// 以上代碼為深拷貝挺举,str1和str3兩個(gè)不同的指針指向了不同的內(nèi)存
NSString *str4 = [str1 mutableCopy];
// 以上代碼為深拷貝,str1和str4兩個(gè)不同的指針指向了不同的內(nèi)存