Copy 與MutableCopy的區別

lihaiyin發表於2015-07-15
NSString *string = @"origion";
NSString *stringCopy = [string copy];
NSMutableString *stringMCopy = [string mutableCopy];
[stringMCopy appendString:@"!!"];

上面這段程式碼中,需要注意的點:

1. retainCount對常量是無效的,數字會是個很大的數字。它對堆上的記憶體物件是正確的,對於棧上的常量無效。

2. copy指的是淺複製,只是複製指標。(對可變的集合而言,copy是生成一個不可變物件。對不可變的集合而言,copy等於strong,其中的元素都是淺拷貝)

3. mutableCopy是深複製,複製了物件到新的記憶體空間(對集合而言,mutableCopy是生成一個新的可變物件,其中的元素都是淺拷貝)

4. mutableCopy出來的都是可變的(NSMutableString)

    NSMutableString *string = [NSMutableString stringWithString: @"origion"];
    NSMutableString *stringCopy = [string copy];
    [stringCopy appendString:@"!!"]; //ERROR
    NSMutableString *stringMCopy = [string mutableCopy];
    [stringMCopy appendString:@"!!"];

上面這段程式碼中,需要注意的點:

1. 無論copy的物件是Mutable的(NSMutableString)還是非Mutable的(NSString),copy出來的都是非Mutable的(NSString)。所以會崩潰

相關文章