今天寫**過程中遇到乙個頭疼的問題:可變陣列經過深拷貝之後,變動新陣列裡面的元素,原來的陣列也會跟著變。
做了一下實驗,得到如下結論:
當陣列元素是自定義類的時候,不管深淺拷貝,陣列裡面的元素位址是不變的。
dpntextcontent *content1 = [[dpntextcontent alloc] init];
content1.content = @"1";
dpntextcontent *content2 = [[dpntextcontent alloc] init];
content1.content = @"2";
dpntextcontent *content3 = [[dpntextcontent alloc] init];
content1.content = @"3";
nsmutablearray *arr1 = [nsmutablearray arraywithobjects:content1,content2,content3, nil];
nsmutablearray *arr2 = [nsmutablearray arraywitharray:arr1];
dpntextcontent *ccc = [arr2 lastobject];
ccc.content = @"999";
nslog(@"%@,%@",arr1,arr2);
這個在程式設計中得小心了。最後以元素替換的方式達到了目的。
附上乙個關於講解深淺拷貝的文章,特別詳盡:
陣列拷貝(深拷貝 淺拷貝)
底層都是使用system.arraycopy object src,int srcpos,object dest,int destpos,int length 方法完成陣列元素拷貝任務的 方法說明 如果newlength original.length,那麼會將原陣列中前newlength個元素拷貝...
iOS偽拷貝, 淺拷貝, 深拷貝
先來說說偽拷貝。偽拷貝就是生成了乙個指標變數,指向了某乙個物件。接下來我們來 下淺拷貝和深拷貝。首先,從copy開始說,簡而言之,copy的目的就是生成乙個新的例項,然後把其成員都按原例項賦值。對於非指標型的成員,比如bool,int,float,這樣的賦值可以直接進行。但是對於指標型的資料,比如o...
IOS開發中深拷貝與淺拷貝
簡而言之 1 對不可變的非集合物件,copy是指標拷貝,mutablecopy是內容拷貝 2 對於可變的非集合物件,copy,mutablecopy都是內容拷貝 3 對不可變的陣列 字典 集合等集合類物件,copy是指標拷貝,mutablecopy是內容拷貝 4 對於可變的陣列 字典 集合等集合類物...