object c的浅拷贝(地址拷贝)和深拷贝(对象拷贝)

本文通过Objective-C代码示例详细解释了深拷贝与浅拷贝的区别:浅拷贝仅复制对象引用,而深拷贝则创建全新的对象及内存地址。此外还探讨了mutableCopy方法在不同对象类型上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
//  main.m
//  DeepCopyDemo
//
//  Created by 千雅爸爸 on 16/10/6.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //浅拷贝是地址拷贝,
        //深拷贝是对象拷贝,是一个新的对象,新的地址
        
        //copy(可以是浅拷贝,也可以是深拷贝) mutablecopy(一定是深拷贝)
        //注意copy方法,如果用来拷贝可变的对象,那么就是浅拷贝,如果copy的是可变的对象,那么就是深拷贝。要记住一点copy 饭回来的对象一定是不可变的
        //mutablecopy,可变拷贝,无论我们使用mutablecopy 这个方法去操作的对象是可变的还是不可变的,最后都会进行深拷贝,而且拷贝出来的空间一定是可变的。
        
        
        NSString *string = @"string";//不可变的字符串
        NSLog(@"%p",string);
        //当copy 拷贝是是一个不可变的字符串的时候,是浅拷贝
        NSString *string2 =[string copy];
        NSLog(@"%p",string2);
        
        //当copy 拷贝是一个可变的字符串的时候,是深拷贝
        NSMutableString *mstring = [[NSMutableString alloc] initWithFormat:@"hello"];
        NSString *string3= [mstring copy];
        NSLog(@"%p",mstring);
        NSLog(@"%p",string3);
        
        //mutablecopy,可变拷贝,无论我们使用mutablecopy 这个方法去操作的对象是可变的还是不可变的,最后都会进行深拷贝,而且拷贝出来的空间一定是可变的。
        NSMutableString *string4 = [string mutableCopy];
        NSLog(@"%p",string);
        NSLog(@"%p",string4);
        
        NSMutableString *string5 = [mstring mutableCopy];
        NSLog(@"%p",string);
        NSLog(@"%p",string5);
        
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值