美文网首页iOS开发
iOS Copy 与 MutableCopy

iOS Copy 与 MutableCopy

作者: 当阳桥 | 来源:发表于2017-02-06 19:40 被阅读66次

用不可变容器类创建的对象 进行的copy 是指针复制,没有创建对象,进行的mutableCopy不再是地址拷贝,是全新的对象,容器内的对象还是指针复制

    NSObject *myObj = [[NSObject alloc] init];
    myObj.myTitle = @"my title";
    
    NSObject *myObj2 = [[NSObject alloc] init];
    myObj2.myTitle = @"my title2";

    NSObject *myObj3 = [[NSObject alloc] init];
    myObj3.myTitle = @"my title3";

    NSArray *array = @[myObj,myObj2,myObj3];
    NSArray *arrayRetain = array;
    NSArray *arrayCopy = array.copy;
    NSMutableArray *mArrayCopy = array.mutableCopy;
    
    NSLog(@"----------------------------------------------------------------------------------");
    NSLog(@"%p-------%@",array,array);
    NSLog(@"%p-------%@",arrayRetain,arrayRetain);
    NSLog(@"%p-------%@",arrayCopy,arrayCopy);
    NSLog(@"%p-------%@",mArrayCopy,mArrayCopy);

用可变的容器创建的对象 进行copy,mutableCopy不是指针复制,都是创建了全新的对象,容器内的对象还是指针复制

    NSMutableArray *mArray = [NSMutableArray arrayWithArray:@[myObj,myObj2,myObj3]];
    
    NSArray *arrayRetain = mArray;
    NSArray *arrayCopy = mArray.copy;
    NSMutableArray *mArrayCopy = mArray.mutableCopy;

    NSLog(@"----------------------------------------------------------------------------------");
    NSLog(@"%p-------%@",mArray,mArray);
    NSLog(@"%p-------%@",arrayRetain,arrayRetain);
    NSLog(@"%p-------%@",arrayCopy,arrayCopy);
    NSLog(@"%p-------%@",mArrayCopy,mArrayCopy);
    
    NSLog(@"----------------------------------------------------------------------------------");
    [mArray removeAllObjects];
    NSLog(@"%p-------%@",mArray,mArray);
    NSLog(@"%p-------%@",arrayRetain,arrayRetain);
    NSLog(@"%p-------%@",arrayCopy,arrayCopy);
    NSLog(@"%p-------%@",mArrayCopy,mArrayCopy);

    NSArray *array = [NSMutableArray arrayWithArray:@[myObj,myObj2,myObj3]];

不可变的非容器类对象 copy 只是地址复制。mutableCopy不是地址复制,创建了新的对象

    NSString *string = @"string";
    NSString *stringCopy = string.copy;
    NSMutableString *mStringCopy = string.mutableCopy;
    
    NSLog(@"%p-------%@",string,string);
    NSLog(@"%p-------%@",stringCopy,stringCopy);
    NSLog(@"%p-------%@",mStringCopy,mStringCopy);

可变的非容器类对象copy 、mutableCopy不是地址复制,创建了新的对象

    NSString *mString = [NSMutableString stringWithString:@"string"];
    NSString *stringCopy = mString.copy;
    NSMutableString *mStringCopy = mString.mutableCopy;
    
    NSLog(@"%p-------%@",mString,mString);
    NSLog(@"%p-------%@",stringCopy,stringCopy);
    NSLog(@"%p-------%@",mStringCopy,mStringCopy);

相关文章

  • iOS开发深拷贝与浅拷贝的关系

    IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解 copy与retain的区别: copy是创建...

  • iOS开发之copy

    iOS中copy有两种copy和mutableCopy

  • copy与mutablecopy使用对比

    杂七杂八 copy和mutableCopy都是浅拷贝!!!iOS中的copy,mutableCopy,深拷贝和浅拷...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解iOS ...

  • iOS:浅谈 深.浅拷贝与copy.strong

    概要的测试了copy与mutableCopy的区别 深.浅拷贝●copy/mutableCopy NSString...

  • iOS copy与mutableCopy

    以前只知道copy操作过的对象,会得出一个新的不可变对象而mutableCopy操作过的对象,会得出一个新的可变对...

  • iOS - copy与mutableCopy

    浅拷贝与深拷贝 浅拷贝:指针拷贝,不产生新的对象,源对象的引用计数器+1 深拷贝:对象拷贝,会产生新的对象,源对象...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • iOS Copy 与 MutableCopy

    用不可变容器类创建的对象 进行的copy 是指针复制,没有创建对象,进行的mutableCopy不再是地址拷贝,是...

  • iOS - Copy 与 MutableCopy

    参考链接 一、深拷贝和浅拷贝#### 深拷贝:对象拷贝 - 直接拷贝内容。 单层深拷贝:这种方式只能够提供一层内存...

网友评论

    本文标题:iOS Copy 与 MutableCopy

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