copy 與 mutableCopy

深淺拷貝的區(qū)別就是看是否消耗了新的內(nèi)存空間。

淺拷貝是指針拷貝,如下圖左邊Array1和Array2指向同一塊內(nèi)存地址:

Array2 = [Array1  copy]

深拷貝是對(duì)象拷貝,如下圖右Array1和Array2,雖然元素一樣,但是卻指向不同的內(nèi)存地址:

//Array2復(fù)制了Array1的對(duì)象,并開辟了一個(gè)新的內(nèi)存空間
Array2 = [Array1 mutableCopy]
圖片來自網(wǎng)絡(luò).png
/*凡是可變對(duì)象,不管使用copy還是mutableCopy都是深拷貝
凡是不可變對(duì)象,使用copy是淺拷貝,mutableCopy是深拷貝*/
NSMutableString *m_string = [NSMutableString stringWithString:@"m_abc"];
NSLog(@"%p %p %p",m_string,[m_string mutableCopy],[m_string copy]);
//0x1004004e0 0x100400520 0x6362615f6d55
//這三個(gè)地址內(nèi)存都不一樣

NSString *c_string = @"c_abc";
NSLog(@"%p %p %p",c_string,[c_string mutableCopy],[c_string copy]);
//0x100002150 0x100303410 0x100002150
//用copy時(shí),內(nèi)存地址跟原來的一樣

NSMutableArray *m_array = [NSMutableArray array];
NSLog(@"%p %p %p",m_array,[m_array mutableCopy],[m_array copy]);
//0x1003035d0 0x100303650 0x1002027d0

NSArray *c_array = @[@"abc"];
NSLog(@"%p %p %p",c_array,[c_array mutableCopy],[c_array copy]);
//0x100202680 0x100202b50 0x100202680

總結(jié):如果想新建一塊內(nèi)存地址來存儲(chǔ)變量,就用深拷貝,否則用淺拷貝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容