国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

IOS NSCopying

2019-11-08 00:26:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

首 先,從copy開始說(shuō),簡(jiǎn)而言之,copy的目的就是生成一個(gè)新的實(shí)例,然后把其成員都按原實(shí)例賦值。對(duì)于非指針型的成員,比如BOOL, int, float,這樣的賦值可以直接進(jìn)行。但是對(duì)于指針型的數(shù)據(jù),比如Objc中用到的對(duì)象,就有Deep Copy和Shallow Copy的區(qū)別——這個(gè)和在C++中的基本上是一樣的:是生成新的成員對(duì)象,或是指向同一成員對(duì)象。了 解了這點(diǎn)以后,再看看Copy在Objetive-C中的實(shí)現(xiàn)方式。如果要調(diào)用一個(gè)對(duì)象的copy方法,這個(gè)對(duì)象必須遵循NSCopying的協(xié)議。這個(gè) 協(xié)議中規(guī)定了一個(gè)方法:- (id)copyWithZone:(NSZone *)zone;我們就是通過(guò)實(shí)現(xiàn)這個(gè)方法給對(duì)象提供拷貝的功能。對(duì)于很多現(xiàn)有類,如NSString,NSDictionary,。。。這個(gè)方法已經(jīng)實(shí) 現(xiàn)。假設(shè)我們現(xiàn)在自定義了一個(gè)類,需要為這個(gè)類提供拷貝的功能,就需要自己來(lái)動(dòng)手寫CopyWithZone的方法:示例如下:

@interface PRoduct()<NSCopying>@property(nonatomic,weak)id<NSCopying>delegate;@end@implementation Product-(instancetype)initWithName:(NSString*)name Address:(NSString*)address{ if (self = [super init]) { self.name = name; self.Address = address; } return self;}-(id)copyWithZone:(NSZone *)zone{ Product *product = [[Product alloc]initWithName:self.name Address:self.Address]; [product setDelegate:[self delegate]]; return product;}

使用

Product *p1 = [[Product alloc]initWithName:@"BOB" Address:@"beijin"]; Product *p2 = [p1 copy]; NSLog(@"p1.add=%p,%@,p2.add=%p,%@",p1,p1.name,p2,p2.name);

打印出來(lái)的對(duì)象地址是不同的,但是內(nèi)容是一樣的


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 馆陶县| 巧家县| 西青区| 唐山市| 景泰县| 东兴市| 余干县| 东乌珠穆沁旗| 灵川县| 清新县| 泾源县| 华蓥市| 瓮安县| 通化市| 平凉市| 岚皋县| 宝兴县| 泰顺县| 将乐县| 铜川市| 高邮市| 饶阳县| 文山县| 同江市| 韩城市| 积石山| 永泰县| 黄骅市| 上林县| 宜昌市| 镇赉县| 武邑县| 新余市| 正安县| 古丈县| 张家界市| 永福县| 定陶县| 荔浦县| 虞城县| 碌曲县|