retain是建立乙個指標,引用物件計數加1。
copy屬性表示兩個物件內容相同,新的物件retain為1 ,與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。
retain屬性表示兩個物件位址相同(建立乙個指標,指標拷貝),內容當然相同,這個物件的retain值+1也就是說,retain 是指標拷貝,copy 是內容拷貝
對於系統支援copy的物件而言,
1.淺拷貝只複製指向物件的指標,而不複製引用物件本身。即與原物件的記憶體位址相同,沒有產生新的物件。
2.深拷貝複製引用物件本身,產生了新的物件,不同於原物件的記憶體位址。
直接對自定義物件實現copy,物件內的屬性並不會拷貝
如果自定義物件想實現copy 方法,那麼就必須遵守nscopying,並且實現 copywithzone: 方法,如果自定義物件想實現mutablecopy方法 那麼就必須遵守nsmutablecopying,並且實現 mutablecopywithzone: 方法。
- (id)mutablecopywithzone:(nszone *)zone
淺拷貝 深拷貝
copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...
深拷貝 淺拷貝
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...
深拷貝, 淺拷貝
nsstring copy 指標複製,返回的物件的位址和方法的接收者一樣,引用計數加1 nsmutablestring copy 深複製,重新alloc乙個 nsstring 的物件,並返回。返回物件的位址和方法接收者的位址不一樣,並且方法接受者的內容改變不影響返回物件,同時返回物件的內容不可以改變...