美文网首页
Objective-C中的深拷贝与浅拷贝

Objective-C中的深拷贝与浅拷贝

作者: 兰帕德 | 来源:发表于2021-12-28 21:34 被阅读0次
    一、概念
    • 浅拷贝——只拷贝指向对象的指针,不拷贝引用对象本身。
    • 深拷贝——拷贝引用对象本身。
      将对象obj,拷贝后得到obj-copy。对于浅拷贝来说,obj和obj-copy指向的是同一个内存资源,拷贝的只是一个指针,对象资源还是只有一份。如果对obj-copy进行修改,obj引用的对象也同样被修改,因为两个指针指向的是同一个内存资源。对于深拷贝来说,内存中存在了两份独立的对象资源。
    二、copy、mutableCopy
    • 1、对于不可变非集合对象,copy是浅拷贝,mutableCopy是深拷贝。
    • 2、对于可变非集合对象,copy、mutableCopy都是深拷贝。
    • 3、对于不可变的数组、字典、集合等集合类对象,copy是浅拷贝,mutableCopy是深拷贝。
    • 4、对于可变的数组、字典、集合等集合类对象,copy、mutableCopy都是深拷贝。
      【注】对于集合对象的深拷贝,仅仅拷贝对象本身,对象里面的元素都是浅拷贝。想要深拷贝整个集合对象,就要用到集合类深拷贝的方法,有如下两种:
      (1)使用initWithArray:copyItems:initWithDictionary:copyItems方法,将第二个参数设置为YES即可,例如:
    NSArray *array = [[NSArray alloc] initWithArray:someArray copyItems:YES];
    

    (2)将集合对象进行归档(archive),然后解归档(unarchive),例如:

    NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:someArray]];
    

    相关文章

      网友评论

          本文标题:Objective-C中的深拷贝与浅拷贝

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