歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Objective-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方法;
 
如果是自己創建的類,我們需要來實現代理<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;
}

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

Objective-C中@property的所有屬性詳解 http://www.linuxidc.com/Linux/2014-03/97744.htm

Objective-C 和 Core Foundation 對象相互轉換的內存管理總結 http://www.linuxidc.com/Linux/2014-03/97626.htm

使用 Objective-C 一年後我對它的看法 http://www.linuxidc.com/Linux/2013-12/94309.htm

10個Objective-C基礎面試題,iOS面試必備 http://www.linuxidc.com/Linux/2013-07/87393.htm

Objective-C適用C數學函數 <math.h> http://www.linuxidc.com/Linux/2013-06/86215.htm

Copyright © Linux教程網 All Rights Reserved