copy和mutablecpy区别
和唐討論心得
?
我剛才能用copy解決 是因?yàn)? 對于系統(tǒng)的非容器類對象,如果對一不可變對象復(fù)制,copy是指針復(fù)制(淺拷貝)和mutableCopy就是對象復(fù)制(深拷貝)。如果是對可變對象復(fù)制,都是深拷貝,但是copy返回的對象是不可變的,如果對返回的對象進(jìn)行可變操作是非法的。(該結(jié)論對系統(tǒng)的容器類對象也是成立的,如NSArray, NSString)
?
?Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'
我是用NSMutbleString測試的
使用copy后? 復(fù)制過來的對象變成不可變了
?
容器的mutablecopy也只是對容器的入口進(jìn)行復(fù)制,多了個入口,其中的對象并沒有復(fù)制新的一份。經(jīng)過測試發(fā)現(xiàn)不管是copy還是mutablecopy對于容器里面的內(nèi)容并沒有進(jìn)行深層的復(fù)制。如果改變?nèi)萜髦心硞€對象的值會發(fā)現(xiàn)影響著原始對象的值。
?
update-1.2
唐說這樣的話很容易使用混淆,于是決定使用一個類別來解決此問題
類別請看附件
如何實(shí)現(xiàn)自定義對象的(非容器類)深層復(fù)制
(arc下)
?
?
結(jié)果如下圖:
?
?
轉(zhuǎn)載于:https://blog.51cto.com/derkin2jessie/1191470
總結(jié)
以上是生活随笔為你收集整理的copy和mutablecpy区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery Mobile数据属性
- 下一篇: EIGRP实验--协议工作过程详解(一)