美文网首页
理解深浅拷贝

理解深浅拷贝

作者: coder袁 | 来源:发表于2018-11-14 12:20 被阅读0次
    • 浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址
    • 深拷贝是真正的复制了一份,复制的对象指向了新的地址
    NSDictionary *dic = @{@"key1":@"1",@"key2":@"2",@"key3":@"3"};
    NSDictionary *dict = dic.mutableCopy;
    NSLog(@"dic地址 = %p,dict地址 = %p",dic,dict);
    //
    
    NSDictionary *dic = @{@"key1":@"1",@"key2":@"2",@"key3":@"3"};
    NSDictionary *dict = dic.copy;
    NSLog(@"dic地址 = %p,dict地址 = %p",dic,dict);
    //
    
    单拿字符串来验证(数组以及字典结果与其一致,不做展示)
    NSString *str1 = @"str";
    NSString *str2 = str1.copy;  
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址不变
    //str1地址 = 0x10b2f3630,str2地址 = 0x10b2f3630  
    NSString *str1 = @"str";
    NSString *str2 = str1.mutableCopy;  
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x10b032630,str2地址 = 0x6000014a0030
    NSString *str1 = @"str";
    NSMutableString *str2 = str1.copy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址不变
    //str1地址 = 0x10d9ea630,str2地址 = 0x10d9ea630
    NSString *str1 = @"str";
    NSMutableString *str2 = str1.mutableCopy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x10ac95630,str2地址 = 0x600001ad4000
    NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
    NSString *str2 = str1.copy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x60000154ae50,str2地址 = 0xff39850259afb90d
    NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
    NSString *str2 = str1.mutableCopy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x6000035e75a0,str2地址 = 0x6000035e6df0
    NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
    NSMutableString *str2 = str1.copy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x600000831260,str2地址 = 0x87c4bdb0e6f8bfc3
    NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
    NSMutableString *str2 = str1.mutableCopy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x6000002b6160,str2地址 = 0x6000002b6190
    
    "再来看看下面的"
    NSString *str1 = [NSMutableString stringWithString:@"str1"];
    NSString *str2 = str1.copy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x6000025cb0f0,str2地址 = 0xcfde541c74c6ab89
    NSString *str1 = [NSMutableString stringWithString:@"str1"];
    NSString *str2 = str1.mutableCopy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x600000f7bd80,str2地址 = 0x600000f7be10
    NSMutableString *str1 = @"str";
    NSString *str2 = str1.copy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址不变
    //str1地址 = 0x10d186630,str2地址 = 0x10d186630
    NSMutableString *str1 = @"str";
    NSString *str2 = str1.mutableCopy;
    NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
    #打印结果地址变了
    //str1地址 = 0x109e17630,str2地址 = 0x60000217c3f0
    

    相关文章

      网友评论

          本文标题:理解深浅拷贝

          本文链接:https://www.haomeiwen.com/subject/udocfqtx.html