深浅拷贝

概念:

浅复制:不拷贝对象本身,仅仅是拷贝指向对象的指针
深复制:是直接拷贝整个对象内存到另一块内存中

注意:这里有一块需要注意的地方,浅拷贝拷贝的是指针,不会产生新的对象,所以指向的对象还是以前的对象,内容还是以前的内容,深拷贝的时候是拷贝整个对象到另一块内存中,产生了新的对象,新对象的指针和之前对象的指针肯定是不一样的,根据指针来寻找对象,一样的话就找到了原来的对象,不是你的新对象,这里有一个理解上的偏差。

copy和mutableCopy使用

    NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
    NSArray *arrayCopy = [array copy];
    NSMutableArray *mArrayCopy = [array mutableCopy];
    NSMutableArray *mArrayCopy2 = [mArrayCopy mutableCopy];
    NSArray *mArrayCopy3 = [mArrayCopy copy];
    NSLog(@"\narray = %p\narrayCopy = %p\nmArrayCopy = %p\nmArrayCopy2 = %p \nmArrayCopy3 = %p",array,arrayCopy,mArrayCopy,mArrayCopy2,mArrayCopy3);

打印

    array = 0x60000045a010
    arrayCopy = 0x60000045a010
    mArrayCopy = 0x60000045a040
    mArrayCopy2 = 0x60000045a070 
    mArrayCopy3 = 0x60000045a0a0

总结:

copy修饰不可变对象,则两个对象的内存地址完全一样,系统并没有创建一个新对象,属于浅拷贝;
copy修饰可变对象,两个对象的内存地址不一样,创建了新的对象,属于深拷贝;
mutableCopy不管是修饰可变对象还是不可变对象,都会产生新的对象,属于深拷贝

你可能感兴趣的:(深浅拷贝)