iOS的深/浅拷贝

oc中的copy比较复杂,要根据容器和非容器来看。
浅拷贝:指针拷贝,只拷贝源对象指针,不会生成新的的对象或内存
深拷贝:值和内存地址和原对象都不一样,开辟了新的内存。与源对象没有关系

非集合类
NSString->copy:指针拷贝,内存和值与源对象一样
->mutableCopy:深拷贝,副本对象变成可变。内容与源对象一样,内存不一样
MutableString->copy: 内存与源对象不一样,值一样但是副本对象会变成不可变对象
->mutableCopy:内存与原对象不一样,开辟新的内存。

总结:不可变字符串 copy 是浅拷贝,muatblecopy 是深拷贝,副本对象变成不可变字符串 。可变字符串无论是copy/mutablecopy都是深拷贝,但是copy时副本对象会变成不可变字符串
1
集合类
NSArray->copy:内存和值与原对象一样,返回的是不可变对象
->MutableCopy:深拷贝 内存不一样,值一样
MutableArray->copy:内存不一样,副本对象变成不可变对象。
->MutbleCopy:内存不一样,值一样

总结:集合类不可变copy时是浅拷贝,mucopy时是深拷贝
集合类可变copy时深拷贝,副本对象变成不可变对象,mucopy时深拷贝
容器类深拷贝只是单层深拷贝,虽然开辟了新内存地址但是值都一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值