標籤:
1.iOS 深拷貝和淺拷貝的區別
淺拷貝:
淺拷貝只是對對象的簡單拷貝,讓幾個對象共用一片記憶體,當記憶體銷毀的時候,指向這片記憶體的幾個指標需要重新定義才可以使用,要不然會成為野指標
在 iOS 裡面, 使用retain 關鍵字進行引用計數,就是一種更加保險的淺拷貝。他既讓幾個指標共用同一片記憶體空間,又可以在release 由於計數的存在,不會輕易的銷毀記憶體,達到更加簡單使用的目的。
深拷貝:
深拷貝是指拷貝對象的具體內容,而記憶體位址是自主分配的,拷貝結束之後,兩個對象雖然存的值是相同的,但是記憶體位址不一樣,兩個對象也互不影響,互不干涉。
copy 與 retain 的區別:
copy 是建立一個新對象,retain 是建立一個指標,引用對象計數加一。 copy屬性標識兩個對象內容相同,新的對象retain count為1, 與舊有對象引用計數無關,舊有對象沒有變化。copy減少對象對內容相關的依賴。
iOS裡的深拷貝:
iOS提供了copy和mutableCopy方法,顧名思義,copy就是複製了一個imutable的對象,而mutableCopy就是複製了一個mutable的對象。以下將舉幾個例子來說明。
這裡指的是NSString, NSNumber等等一類的對象。
| 1234 |
NSString *string = @”dddd";NSString *stringCopy = [string copy];NSMutableString *stringDCopy = [string mutableCopy];[stringMCopy appendString:@"!!"]; |
查看記憶體可以發現,string和stringCopy指向的是同一塊記憶體地區(weak reference),引用計數沒有發生改變。而stringMCopy則是我們所說的真正意義上的複製,系統為其分配了新記憶體,是兩個獨立的字串內容是一樣的。
iOS深淺拷貝的區別