自訂類實現<NSCopying>協議,自訂nscopying

來源:互聯網
上載者:User

自訂類實現<NSCopying>協議,自訂nscopying

目的:自訂一個 Person 類,實現 copy.

首先定義一個 Person 類,由於是自訂類,為了能夠支援 copy 方法,需要實現<NSCopying>協議

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

<NSCopying>協議中有一個 - (id)copyWithZone:(NSZone *)zone方法,需要在 Person 的. m 檔案中實現它.

@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];                                 //建立 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.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.