zoukankan      html  css  js  c++  java
  • IOS 深拷贝和浅拷贝应用

    浅层复制:只复制指向对象的指针,而不复制引用对象本身。
    深层复制:复制引用对象本身。

    意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,

    那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了两份独立对象本身。

    用网上一哥们通俗的话将就是:

    浅复制好比你和你的影子,你完蛋,你的影子也完蛋

    深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。

         NSMutableArray *newArr = [[NSMutableArray alloc]init];
            NSMutableArray *oldArr = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3", nil];
            newArr = [oldArr mutableCopy];
            [oldArr addObject:@"4"];
            NSLog(@"%@",oldArr);
            NSLog(@"%@",newArr);
    
            
            NSMutableArray *newArray = [[NSMutableArray alloc]init];
            NSMutableArray *oldArray = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e", nil];
            newArray = (NSMutableArray*)(CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFPropertyListRef)oldArray, kCFPropertyListImmutable));
            [oldArray addObject:@"f"];
            NSLog(@"oldArray retainCount is %d",(int)[oldArray retainCount]);
            NSLog(@"oldArray %@",oldArray);
            NSLog(@"newArray %@",newArray);
            [newArray release];

      

  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/joesen/p/2993438.html
Copyright © 2011-2022 走看看