objective-c 複製對象

來源:互聯網
上載者:User

標籤:objective-c   指標   

對象的複製有深複製和淺複製兩種,聽上去高大上會很難,其實很簡單;

來舉個例子:

NSMutableArray * array1 = [NSMutableArray arrayWithObjects:@"a"  ,@"b", nil];        NSMutableArray *array2 = array1;        [array2 addObject:@"c"];        for(NSString *s in array1)        {            NSLog(@"%@",s);        }

輸出結果:

2014-08-16 11:17:21.524 text[1679:303] a2014-08-16 11:17:21.526 text[1679:303] b2014-08-16 11:17:21.526 text[1679:303] c

看上面的,我們在array2中添加“c“,而遍裡array1時卻也有(array2中肯定也有c);

這就是淺複製,我們複製了數組array1的指標給array2,假設array1指向oxfffff這個地區,現在我們將array2 =array1是將array1指向的地址賦值給了array2,當我們操作array2時實際上是操作的那塊地區,而array1也指向那塊地區,所以就會出現這個結果;

這就是淺複製;

深複製:
上面的例子中,如果要想修改array2,而array1不變就需要使用深複製。深複製有可變複製和不可變複製,意思就是複製體可不可以變,就像nsarray是不可變的而nsmutablearry是可變的。需要用到 copy和mutablecopy方法;

如果是系統提供的類,如NSArray、NSString等可以直接使用copy、mutablecopy方法;

如果是自己建立的類,我們需要來實現代理<NSCopying> 

需要實現裡面的

-(id)copyWithZone:(NSZone *)zone

-(id) mutableCopyWithZone:(NSZone *)zone

方法,一個代表著是不可變複製,一個是可變複製;

實現方法:

-(id)copyWithZone:(NSZone *)zone{    first *new = [[first allocWithZone:zone]init];    new.string = self.string;    return new;}-(id) mutableCopyWithZone:(NSZone *)zone{    first *new  = [[first allocWithZone:zone]init];    new.string = self.string;    return new;}

看一下代碼其實就明白深複製是什麼意思了,深複製就是重新開闢一塊空間,用原來的值進行初始化;

就是這樣;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.