NSString *str1 = @"str1";
NSString *str2 = str1;
NSLog(@"指针地址:str1:%p str2:%p",&str1,&str2);
// 输出:指针地址:str1:0x7ffee8fa80f8 str2:0x7ffee8fa80f0
NSLog(@"指针指向的内存地址:str1:%p str2:%p",str1,str2);
// 输出:指针指向的内存地址:str1:0x106c57188 str2:0x106c57188
NSLog(@"内存中的内容:str1:%@ str2:%@",str1,str2);
// 输出:内存中的内容:str1:str1 str2:str1
NSLog(@"内存块中的16进制内容:str1:%X str2:%X",str1,str2);
// 输出:内存块中的16进制内容:str1:6C57188 str2:6C57188
// 总结:两个不同的指针指向了同一块内存
NSString *str3 = [str1 copy];
// 以上代码为浅拷贝,str1和str3两个不同的指针指向了同一块内存
NSString *str4 = [str1 mutableCopy];
// 以上代码为深拷贝,str1和str4两个不同的指针指向了不同的内存
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(@"指针指向的内存地址:str1:%p str2:%p",str1,str2);
// 输出:指针指向的内存地址:str1:0x604000240720 str2:0x604000240720
NSLog(@"内存中的内容:str1:%@ str2:%@",str1,str2);
// 输出:内存中的内容:str1:st1__str__str2 str2:st1__str__str2
NSLog(@"内存块中的16进制内容:str1:%X str2:%X",str1,str2);
// 输出:内存块中的16进制内容:str1:5F5F0 str2:5F5F0
// 总结:两个不同的指针指向了同一块内存
NSString *str3 = [str1 copy];
// 以上代码为深拷贝,str1和str3两个不同的指针指向了不同的内存
NSString *str4 = [str1 mutableCopy];
// 以上代码为深拷贝,str1和str4两个不同的指针指向了不同的内存
网友评论