1、NSArray 被copy 、strong修飾后的變化:
(1)strong:被strong修飾之后,由于只是強(qiáng)引用仅乓,所以修飾后的對(duì)象數(shù)組和源對(duì)象數(shù)組只是指向同一個(gè)內(nèi)存區(qū)域,這樣就會(huì)造成修飾后的對(duì)象數(shù)組會(huì)隨著源對(duì)象數(shù)組的改變而改變,即便有時(shí)候你并不想讓修飾后的對(duì)象跟著改變匿又。
(2)copy:被copy修飾之后方灾,源對(duì)象數(shù)組被copy了一份,源對(duì)象數(shù)組和修飾后的對(duì)象數(shù)組是不同的碌更,所以修飾后的對(duì)象數(shù)組并不會(huì)隨著源對(duì)象數(shù)組改變裕偿。
由打印結(jié)果可知,被strong修飾的array 隨著mutableArray的變化而變化痛单,而被copy修飾的array并沒有變化嘿棘。
使用strong,則arrayStrong與可變數(shù)組mutableArray指向同一塊內(nèi)存區(qū)域旭绒,mutableArray內(nèi)容改變鸟妙,導(dǎo)致arrayStrong的內(nèi)容改變,因?yàn)閮烧呤峭粋€(gè)東西挥吵;而使用copy重父,arrayCopy在賦值之前,將mutableArray內(nèi)容復(fù)制忽匈,創(chuàng)建一個(gè)新的內(nèi)存區(qū)域房午,所以兩者不是一回事,mutableArray的改變不會(huì)導(dǎo)致arrayCopy的改變丹允。
綜上所述:
當(dāng)修飾可變類型的屬性時(shí)郭厌,如NSMutableArray、NSMutableDictionary雕蔽、NSMutableString折柠,用strong。
當(dāng)修飾不可變類型的屬性時(shí)批狐,如NSArray扇售、NSDictionary、NSString,用copy承冰。
2嘱根、NSMutableArray 被copy 、strong修飾后的變化:
? ? ? 把NSMutableArray用copy修飾有時(shí)候就會(huì)crash巷懈,因?yàn)閷?duì)這個(gè)數(shù)組進(jìn)行了增刪改操作,而copy后的數(shù)組? ? ? ? 變成了不可變數(shù)組NSArray慌洪,沒有響應(yīng)的增刪改方法顶燕,所以對(duì)其進(jìn)行增刪改操作就會(huì)報(bào)錯(cuò)。
? ? ?如果是strong冈爹,直接是賦值涌攻;右邊是什么,左邊就是什么频伤,并且是強(qiáng)引用新值恳谎,左邊的類型會(huì)與右? ? ? ? ? ? ? ? ?邊的相同,不會(huì)改變憋肖。