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

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

深入理解object C中復(fù)制對象的用法

2019-11-09 16:57:22
字體:
供稿:網(wǎng)友

第一、復(fù)制對象的基本概念

復(fù)制一個對象為副本,開辟一塊新的內(nèi)存來存儲副本對象。

第二、如果一個對象想具備復(fù)制的功能,必須實現(xiàn)<NSCopying>協(xié)議和<NSMutableCopying>協(xié)議

NSObject自帶的常用的對象有:NSNumber、NSString、NSArray、NSDictionary、NSMutableArray、NSMutableDictionay、NSMutableString,copy產(chǎn)生的對象時不可變的,mutableCopy產(chǎn)生的對象時可變的

第三、retain和copy的區(qū)別

  copy與retain的區(qū)別:  copy是創(chuàng)建一個新對象,retain是創(chuàng)建一個指針,引用對象計數(shù)加1。Copy屬性表示兩個對象內(nèi)容相同,新的對象retain為1 ,與舊有對象的引用計數(shù)無關(guān),舊有對象沒有變化。copy減少對象對上下文的依賴。  retain屬性表示兩個對象地址相同(建立一個指針,指針拷貝),內(nèi)容當(dāng)然相同,這個對象的retain值+1也就是說,retain 是指針拷貝,copy 是內(nèi)容拷貝。    當(dāng)然在ios中并不是所有的對象都支持copy,mutableCopy,遵守NSCopying 協(xié)議的類可以發(fā)送copy消息,遵守NSMutableCopying 協(xié)議的類才可以發(fā)送mutableCopy消息。假如發(fā)送了一個沒有遵守上訴兩協(xié)議而發(fā)送 copy或者 mutableCopy,那么就會發(fā)生異常。但是默認(rèn)的ios類并沒有遵守這兩個協(xié)議。如果想自定義一下copy 那么就必須遵守NSCopying,并且實現(xiàn) copyWithZone: 方法,如果想自定義一下mutableCopy 那么就必須遵守NSMutableCopying,并且實現(xiàn) mutableCopyWithZone: 方法。

    @autoreleasepool {        NSMutableArray *array=[NSMutableArray arrayWithObjects:@"one",@"two",@"three",@"four",nil];        NSMutableArray *retainArray=[array retain];        [retainArray removeLastObject];        for(NSString *str in array)        {            NSLog(@"the part is %@",str);        }        NSLog(@"the retaincount is %ld",[retainArray retainCount]);        // insert code here...        NSLog(@"Hello, World!");            }

第四、COPY和MutableCopy的區(qū)別

COPY 返回一個不可變對象的副本,MutalbeCopy返回一個可變對象的副本。

NSArray *array=[NSArray arrayWithObjects:@"one",@"two", nil];        NSMutableArray *array1=[array copy];        [array1 addObject:@"three"];  //error        NSMutableArray *array2=[array mutableCopy];        [array2 addObject:@"three"];  //right        // insert code here...        NSLog(@"Hello, World!");第五、淺copy和深copy

淺復(fù)制盡復(fù)制對象本身,對象里的屬性、包含的對象不做復(fù)制

深復(fù)制復(fù)制全部,包括對象的屬性和其他對象

Foundation框架支持復(fù)制的類,默認(rèn)是淺復(fù)制

NSMutableArray *array=[[NSMutableArray alloc] init];        for(int i=0;i<3;i++)        {            NSObject *obj=[[NSObject alloc] init];            [array addObject:obj];            [obj release];        }        for(NSObject *obj1 in array)        {            NSLog(@"地址為 %p,引用計數(shù)是 %ld",obj1,obj1.retainCount);        }        NSMutableArray *array2=[array copy];        for(NSObject *obj2 in array2)        {            NSLog(@"地址為 %p,引用計數(shù)是 %ld",obj2,obj2.retainCount);        }
2013-09-30 17:28:01.492 FDAS[681:303] 地址為 0x1001081f0,引用計數(shù)是 12013-09-30 17:28:01.506 FDAS[681:303] 地址為 0x100108230,引用計數(shù)是 12013-09-30 17:28:01.506 FDAS[681:303] 地址為 0x100108240,引用計數(shù)是 12013-09-30 17:28:01.507 FDAS[681:303] 地址為 0x1001081f0,引用計數(shù)是 22013-09-30 17:28:01.507 FDAS[681:303] 地址為 0x100108230,引用計數(shù)是 22013-09-30 17:28:01.507 FDAS[681:303] 地址為 0x100108240,引用計數(shù)是 2
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产美女视频免费 | 综合网日日天干夜夜久久 | 性少妇chinesevideo | 国产精品性夜天天视频 | 欧美日韩精品不卡一区二区三区 | 精精国产xxxx视频在线野外 | 暴力肉体进入hdxxxx古装 | 羞羞的视频 | 7777在线视频免费播放 | 91性高湖久久久久久久久网站 | 免费一级欧美大片视频 | 护士xxxx| 毛片118极品美女写真 | 日韩毛片一区二区三区 | 韩国美女一区 | 亚洲精品成人av在线 | 羞羞视频一区 | 久久污 | 成人毛片在线免费看 | 成人店女老板视频在线看 | 色就操 | 日本xxxx视频 | gril hd | 亚洲日本韩国精品 | 色猫av| 精品国产乱码久久久久久久久 | 亚洲精品欧美二区三区中文字幕 | 国产乱一区二区三区视频 | 91精品国产777在线观看 | 久久久久免费精品国产小说色大师 | 青青草成人免费视频在线 | 久久99精品国产自在现线 | 亚洲第一黄色网 | 午夜视频在线免费观看 | 欧美一级片在线 | 成人性爱视频在线观看 | 91在线色 | 九九精品视频观看 | free国产hd老熟bbw | 国产精品片一区二区三区 | 一级在线|