在iOS中常見的賦值方式有三種镀钓,分別是直接賦值、copy賦值镀迂、mutableCopy賦值丁溅。那么這三種賦值方式有什么區(qū)別呢?
在ChinaCocoa論壇的一個帖子中我看到了如下的說法(地址:http://www.cocoachina.com/bbs/read.php?tid-135884.html)探遵。
1窟赏、非容器對象
對不可變對象復制,copy是指針復制(淺拷貝)和mutableCopy就是對象復制(深拷貝)箱季。
對可變對象復制涯穷,都是深拷貝,但是copy返回的對象是不可變的藏雏。
2拷况、容器對象
對于容器本身,同非容器對象掘殴。
但是赚瘦,對于容器內(nèi)的對象,則都是指針復制奏寨。真正的深拷貝(即容器本身起意、容器內(nèi)的對象均為深拷貝),
本著實事求是的原則病瞳,我進行了一些測試揽咕。
首先拿容器對象Array來進行測試悲酷,代碼如下:
結(jié)果如下:
2015-12-01 16:01:20.113 iOS7CookBook[2920:110384] 1
2015-12-01 16:01:20.113 iOS7CookBook[2920:110384] 2
2015-12-01 16:01:20.114 iOS7CookBook[2920:110384] 3
從結(jié)果可知,直接賦值是淺拷貝亲善,是指針賦值舔涎。
結(jié)果如下:
2015-12-01 16:02:57.797 iOS7CookBook[2976:111457] 1
2015-12-01 16:02:57.797 iOS7CookBook[2976:111457] 2
從結(jié)果可知,copy賦值是深拷貝逗爹,是對象復制亡嫌。
mutableCopy的測試結(jié)果和copy相同,不再上圖掘而。兩者的區(qū)別就是返回的對象的類型分別為__NSArrayM和__NSArrayI挟冠,前者是可變數(shù)組,后者是不可變數(shù)組袍睡。
Dictionary測試結(jié)果同Array知染,不再上圖。