zoukankan      html  css  js  c++  java
  • copy和mutableCopy详解

    非容器对象:

     

    NSString

    NSMutableString

    不可变对象复制:

    copy是指针复制(浅拷贝);

    mutableCopy就是对象复制(深拷贝)。

    可变对象复制:

    都是深拷贝,但是copy返回的对象是不可变的。

    copy

    浅copy,不会产生新的地址,两个指针指向同一地址

    深copy,会产生新的地址,两个指针指向不同地址,并且copy 出来的对象是不可变的。

    mutableCopy

    深copy,会产生新的地址,两个指针指向不同地址

    深copy,会产生新的地址,两个指针指向不同地址

    系统容器对象:

     

    NSArray

    NSMutableArray

    不可变对象复制:

    copy是指针复制(浅拷贝);

    mutableCopy就是对象复制(深拷贝)。

    可变对象复制:

    都是深拷贝,但是copy返回的对象是不可变的

    对于容器而言,其元素对象始终是指针复制。如果需要元素对象也是对象复制,就需要实现深拷贝。

    copy

    浅copy,不会产生新的地址,两个指针指向同一地址

    深copy,会产生新的地址,两个指针指向不同地址,并且copy 出来的对象是不可变的。

    mutableCopy

    深copy,会产生新的地址,两个指针指向不同地址

    深copy,会产生新的地址,两个指针指向不同地址

    总结:

     

    immutableObject

    mutableObject

    copy

    浅copy

    深copy

    mutableCopy

    深copy

    深copy

    集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制

    NSMutableArray *mArray=[NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c", nil];

    NSArray *array1=[mArray copy];
    NSMutableArray *mArray1=[mArray copy];
    //[mArray1 addObject:@"sss"]; 这一步会出错,因为mutableObject copy返回的对象是不可变的。

    NSArray *array2=[mArray mutableCopy];
    NSMutableArray *mArray2=[mArray mutableCopy];

    NSMutableString *testString = [mArray2 objectAtIndex:0];
    [testString appendString:@"new"];//这样以上三个数组的首元素都被改变了

  • 相关阅读:
    Kafka学习笔记之kafka高版本Client连接0.9Server引发的血案排查
    机器学习笔记之python实现朴素贝叶斯算法样例
    机器学习笔记之python实现支持向量机SVM算法样例
    机器学习笔记之AdaBoost算法详解以及代码实现
    机器学习笔记之python实现关联规则算法Apriori样例
    机器学习笔记之python实现AdaBoost算法
    F-47(copy 邓大顾)
    js 设置标题 空白
    微信授权验证
    iphone web 时间 问题
  • 原文地址:https://www.cnblogs.com/zhangleixy/p/5075771.html
Copyright © 2011-2022 走看看