麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

copy和mutableCopy的深、淺拷貝

2019-11-14 19:37:39
字體:
供稿:網(wǎng)友

對象拷貝主要由兩種方式:copy和mutableCopy。淺拷貝是指直接將指針指向原有的地址,從而達到復(fù)制的目的。深拷貝是指重新生成一個對象,將原有對象的內(nèi)容復(fù)制到新的對象中。copy 返回的是一個不可變的對象,mutableCpoy返回的是一個可變的對象,但是由于OC的弱語法特性,即使如下使用編譯器也不會報錯。但是再運行時,arrayCopy會找不到具體的方法,報錯。

NSMutableArray *arrayCopy=[muArray copy];

copy當所引用的對象是可變的時,則是深拷貝,如果是不可變對象則是淺拷貝。mutableCopy 不管對象是否為可變,都是深拷貝。

int main(int argc, const char * argv[]){        NSMutableArray *muArray=[[NSMutableArray alloc] init];        //定義一個ClassA類,僅作測試用無實際意義    ClassA *a=[[ClassA alloc] init];    [muArray addObject:a];        NSMutableArray *arrayCopy=[muArray copy];//如果調(diào)用add object:則會在運行時報錯,但是編譯時并不會報錯(弱語法)    NSMutableArray *arrayMutableCopy=[muArray mutableCopy];        NSLog(@"%p---%p----%p",arrayCopy,muArray,arrayMutableCopy);        [a release];    [muArray release];    [arrayMutableCopy release];    [arrayCopy release];    return 0;}

打印出來的結(jié)果是

2015-01-23 12:06:58.342 Test[3375:303] 0x100100d40---0x1001023b0----0x100105020

可以看出地址都不相同。

int main(int argc, const char * argv[]){    NSArray *array=@[@1,@2,@3];        NSArray *arrayCopy=[array copy];    NSMutableArray *arrayMutableCopy=[array mutableCopy];        NSLog(@"%p---%p----%p----%ld",arrayCopy,array,arrayMutableCopy,[arrayCopy retainCount]);        [arrayMutableCopy release];    [arrayCopy release];    return 0;}

打印出來的結(jié)果是

 

2015-01-23 12:08:40.091 Test[3388:303] 0x100204ae0---0x100204ae0----0x1002054e0----2

可以看出使用copy出來的對象地址與原地址一樣,也就是其實是同一個對象。且引用計數(shù)器也是2。

與所有容器類一樣,NSArray中存放的依舊是指針。并不是對象本身,其實數(shù)組中每個元素都是對象的地址。當我們使用淺拷貝時我們大部分人都能注意到對象共有的問題。如:

int main(int argc, const char * argv[]){    NSMutableArray *muArray=[[NSMutableArray alloc] init];            //定義一個ClassA類,僅作測試用無實際意義    ClassA *a=[[ClassA alloc] init];    a.val=1;//原數(shù)組中,第一個對象的val是1    [muArray addObject:a];        NSArray *arrayCopy=[muArray copy];    ClassA *b=arrayCopy[0];    b.val=2;//將淺拷貝的數(shù)組,第一個元素的val變?yōu)?        NSLog(@"%ld",[muArray[0] val]);        [a release];    [muArray release];    [arrayCopy release];    return 0;}

打印結(jié)果為

2015-01-23 12:21:32.972 Test[3443:303] 2

即使是深拷貝,依然對原來的數(shù)組造成了影響。

 


因為存放的都是地址,所以深拷貝時,將全部的地址拷了過去,但是還是指向同一個對象。

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品高潮视频 | 国产精品91久久久 | 色婷婷av一区二区三区久久 | 久久精国 | 最新在线中文字幕 | 欧美一级黄视频 | 一本一道久久久a久久久精品91 | 久久91久久久久麻豆精品 | 精品国产高清一区二区三区 | 日韩视频中文 | 久国久产久精永久网页 | 亚洲成人涩涩 | 黄色免费小视频网站 | 久久人人爽人人爽人人片av免费 | 91av国产在线 | 永久久久 | 成人午夜久久 | 亚洲视频精选 | 欧美一区二区精品夜夜嗨 | 亚洲午夜影院在线观看 | 久久精品中文字幕一区二区 | 色综合狠狠 | 午夜视频观看 | 黑人三级毛片 | 九九热免费精品 | 免费黄色小视频网站 | 久久国产精品99国产 | 欧美成人精品h版在线观看 久久久久久三区 | 免费久久久久 | 久久久国产精品成人免费 | 国产视频在线观看一区二区三区 | 国产男女 爽爽爽爽视频 | 久久久婷婷一区二区三区不卡 | 色av成人天堂桃色av | 男女污视频在线观看 | 亚洲人成网站免费播放 | 男女污视频在线观看 | 久久精品a一级国产免视看成人 | 免费永久看羞羞片网站入口 | 欧美日韩高清在线观看 | 高清做爰免费无遮网站挡 |