OC中的深淺拷貝(copy, MutableCopy)

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //------------------不可變的對象-------------------
        //建立一個字符串型a
        NSString *a = @"abcdefg";
        //淺拷貝a,只是引用了一下,打印出來地址是同樣的
        //這裏若是把淺拷貝出來的a1的值改變了,源a是不會跟着變的,a1會自動生成一個新的對象,和a是不一樣的地址
        NSString *a1 = [a copy];
        //深拷貝a,直接克隆了一下,打印出來是不一樣的地址
        NSString *a2 = [a mutableCopy];
        
        //打印a,a1,a2的值,比較一下
        NSLog(@"%@ %@ %@", a, a1, a2);
        //打印a,a1,a2的地址,比較一下
        NSLog(@"%p %p %p", a, a1, a2);
        
        
        
        //------------------可變的對象---------------------
        NSMutableString *b = [NSMutableString stringWithString:@"abcdefg"];
        //對可變對象不管是淺拷貝仍是深拷貝,都是直接克隆了對象出來,都是不一樣的地址
        NSMutableString *b1 = [b copy];
        NSMutableString *b2 = [b mutableCopy];
        
        NSLog(@"%@ %@ %@", b, b1, b2);
        NSLog(@"%p %p %p", b, b1, b2);
        

        
    }
    return 0;
}


ž對一不可變對象複製,copy是指針複製(淺拷貝)和mutableCopy就是對象複製(深拷貝)。spa

若是是對可變對象複製,都是深拷貝,可是copy返回的對象是不可變的。指針



能夠使用copy的類:code

NSNumber,對象

NSString,字符串

NSMutableString,string

NSDictionary,it

žNSMutableDictionary,io

NSArray,table

NSMutableArray,class

NSSet,

NSMutableSet  

相關文章
相關標籤/搜索