22
2020
03

oc 系统对象的 copy 与 mutableCopy 方法

一、非集合类对象的copy与mutableCopy

  在非集合类对象中,对不可变对象进行copy操作,是指针复制,mutableCopy操作是内容复制;

  对可变对象进行copy和mutableCopy都是内容复制。用代码简单表示如下:

    NSString *str = @"hello word!";

    NSString *strCopy = [str copy] // 指针复制,strCopy与str的地址一样

    NSMutableString *strMCopy = [str mutableCopy] // 内容复制,strMCopy与str的地址不一样

 

    NSMutableString *mutableStr = [NSMutableString stringWithString: @"hello word!"];

    NSString *strCopy = [mutableStr copy] // 内容复制

    NSMutableString *strMCopy = [mutableStr mutableCopy] // 内容复制

 

二、集合类对象的copy与mutableCopy (同上)

  在集合类对象中,对不可变对象进行copy操作,是指针复制,mutableCopy操作是内容复制;

  对可变对象进行copy和mutableCopy都是内容复制。但是:集合对象的内容复制仅限于对象本身,对集合内的对象元素仍然是指针复制。(即单层内容复制)

    NSArray *arr = @[@[@"a", @"b"], @[@"c", @"d"];

    NSArray *copyArr = [arr copy]; // 指针复制

    NSMutableArray *mCopyArr = [arr mutableCopy]; //单层内容复制

   

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

    NSArray *copyArr = [mutableArr copy]; // 单层内容复制

    NSMutableArray *mCopyArr = [mutableArr mutableCopy]; // 单层内容复制

    

【总结一句话】:

    只有对不可变对象进行copy操作是指针复制(浅复制),其它情况都是内容复制(深复制)!


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。