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

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

自定義類實現(xiàn)<NSCopying>協(xié)議

2019-11-14 19:37:20
字體:
來源:轉載
供稿:網友

目的:自定義一個 Person 類,實現(xiàn) copy.

首先定義一個 Person 類,由于是自定義類,為了能夠支持 copy 方法,需要實現(xiàn)<NSCopying>協(xié)議

@interface Person : NSObject<NSCopying>@PRoperty (nonatomic, retain)NSString * name;@property (nonatomic, retain)NSString * sex;- (void)setName:(NSString *)name            sex:(NSString *)sex;@end

<NSCopying>協(xié)議中有一個 - (id)copyWithZone:(NSZone *)zone方法,需要在 Person 的. m 文件中實現(xiàn)它.

@implementation Person- (id)copyWithZone:(NSZone *)zone{    id p = [[[self class] allocWithZone:zone] init];<span style="white-space:pre">    //考慮到 Person 可能會有子類,這里用 id 表示類型    [p setName:_name sex:_sex];                //設置復制對象的實例變量,否則默認拷貝的對象的實例變量值為空    return p;}- (void)setName:(NSString *)name            sex:(NSString *)sex{    _name = name;    _sex = sex;}@end

在main.m 文件中進行測試

Person * p1 = [[Person alloc] init];                                 //創(chuàng)建 p1 對象        [p1 setName:@"張三" sex:@""];                              //為 p1 實例變量賦值        Person * p2 = [p1 copy];                                    //從 p1 拷貝一個新對象 p2        NSLog(@"p2.name = %@, p2.sex = %@", p2.name, p2.sex);       //打印 p2 的 name 和 sex        p2.name = @"李四";                                          //更改 p2 的 name        NSLog(@"p2.name = %@", p2.name);        NSLog(@"p1.name = %@", p1.name);                            //再次打印 p1 的 name,驗證 p1 的 name 是否改變

下面是打印結果:

2015-01-21 21:27:59.466 CopyTest[2053:303] p2.name = 張三, p2.sex =2015-01-21 21:27:59.468 CopyTest[2053:303] p2.name = 李四2015-01-21 21:27:59.468 CopyTest[2053:303] p1.name = 張三

可以看出,改變 p2 的 name, 并沒有影響 p1 的name.


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 榕江县| 收藏| 梓潼县| 延寿县| 永仁县| 龙井市| 万宁市| 马边| 和静县| 陆川县| 梅河口市| 光山县| 莱阳市| 乌拉特前旗| 桐城市| 增城市| 肇庆市| 郯城县| 页游| 申扎县| 安康市| 保康县| 尚义县| 莆田市| 兰西县| 自治县| 云安县| 延津县| 巩留县| 永泰县| 广南县| 越西县| 峨眉山市| 尚志市| 临沂市| 文登市| 柳河县| 汨罗市| 威远县| 石首市| 酒泉市|