程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> objective-c 復制對象

objective-c 復制對象

編輯:關於C語言

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] a
2014-08-16 11:17:21.526 text[1679:303] b
2014-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方法;

如果是自己創建的類,我們需要來實現代理

需要實現裡面的

-(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;
}

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

就是這樣;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved