oc中的copy比较复杂,要根据容器和非容器来看。
浅拷贝:指针拷贝,只拷贝源对象指针,不会生成新的的对象或内存
深拷贝:值和内存地址和原对象都不一样,开辟了新的内存。与源对象没有关系
非集合类
NSString->copy:指针拷贝,内存和值与源对象一样
->mutableCopy:深拷贝,副本对象变成可变。内容与源对象一样,内存不一样
MutableString->copy: 内存与源对象不一样,值一样但是副本对象会变成不可变对象
->mutableCopy:内存与原对象不一样,开辟新的内存。
总结:不可变字符串 copy 是浅拷贝,muatblecopy 是深拷贝,副本对象变成不可变字符串 。可变字符串无论是copy/mutablecopy都是深拷贝,但是copy时副本对象会变成不可变字符串
1
集合类
NSArray->copy:内存和值与原对象一样,返回的是不可变对象
->MutableCopy:深拷贝 内存不一样,值一样
MutableArray->copy:内存不一样,副本对象变成不可变对象。
->MutbleCopy:内存不一样,值一样