iOS Objective-C 深拷贝和浅拷贝的详解

本文详细介绍了Objective-C中的深拷贝和浅拷贝概念,包括非容器类和容器类的拷贝特性。对于不可变对象,copy是浅拷贝,mutableCopy是深拷贝;而对于可变对象,两者都是深拷贝。同时,文章讨论了如何正确使用copy关键字,并指出@property(nonatomic,copy)NSMutableArray *array;可能导致在修改数组时程序崩溃的问题,因为它创建的是一个不可变的NSArray对象副本。" 121481390,7639481,理解仿射变换:从线性到透视,"['几何学', '线性代数', '图像处理']

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

什么是深拷贝和浅拷贝

  • 深复制:直接拷贝生成一个新对象,改变原对象的属性不会影响新的对象,在内存中出现了两个独立的对象本身。

  • 浅拷贝:并不拷贝对象本身,只是对指向对象的指针进行拷贝,改变原对象的属性会影响新的对象,内存中本质上还是一个对象。

非容器类的深拷贝和浅拷贝

  1. 不可变对象的拷贝
    //[str1 mutableCopy];生成的是一个可变对象
    //因为都是不可变字符串,创建方式并不影响拷贝方式。
    NSString *str1 = @"这是string";
    NSString *str2 = [str1 copy];
    NSString *str3 = [str1 mutableCopy];
    NSMutableString *str4 = [str1 copy];
    NSMutableString *str5 = [str1 mutableCopy];
    
    NSLog(@"str1 = %p    str2 = %p",str1,str2);
    NSLog(@"str1 = %p    str3 = %p",str1,str3);
    NSLog(@"str1 = %p    str4 = %p",str1,str4);
    NSLog(@"str1 = %p    str5 = %p"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值