copy 與 mutableCopy

深淺拷貝的區別就是看是否消耗了新的內存空間。

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

Array2 = [Array1  copy]

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

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

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

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

總結:如果想新建一塊內存地址來存儲變量,就用深拷貝,否則用淺拷貝

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容