//聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄
一、非集合&不可變
系統(tǒng)非集合類對(duì)象指的是NSString,NSNumber...之類的對(duì)象煮岁。下面先看個(gè)非集合類immutable對(duì)象拷貝的例子
NSString* str =@"test string";
NSString* strCy = [str copy];
NSMutableString* strMCy = [strCymutableCopy];
//!打印輸出
NSLog(@" ? str :%p? %p", str, &str);
NSLog(@" strCy :%p? %p", strCy, &strCy);
NSLog(@"strMCy :%p? %p", strMCy, &strMCy);
//!
str :0x1000010400x7fff5fbff7e8
strCy :0x1000010400x7fff5fbff7e0
strMCy :0x1004002f00x7fff5fbff7d8
打印結(jié)果:
str和strCy的地址是相同的,所以進(jìn)行了指針拷貝即淺拷貝
str和strMCy的地址是不同的区匠,所以進(jìn)行了內(nèi)容拷貝即深拷貝
二入宦、非集合&可變
//! Test 1
NSMutableString* str = [NSMutableString stringWithString:@"m1Str test"];
NSString* strCy = [str copy];
NSMutableString* mStrCy = [str copy];
NSMutableString* mStrMCy = [str mutableCopy];
NSLog(@"? ? str :%p ? ? ? ? %p", str, &str);
NSLog(@"? strCy :%p ? ? %p", strCy, &strCy);
NSLog(@" mStrCy :%p ? ? %p", mStrCy, &mStrCy);
NSLog(@"mStrMCy :%p ? ? ? ? %p", mStrMCy, &mStrMCy);
//!
str :0x100308bd00x7fff5fbff7e8
strCy :0xdea10af20184a50x7fff5fbff7e0
mStrCy :0xdea10af20184a50x7fff5fbff7d8
mStrMCy :0x100308df00x7fff5fbff7d0
//! Test 2
[mStrCy appendString:@"mstr append"];// **Crash**
[str appendString:@" str? "];
[mStrMCy appendString:@" mStrMCy "];
從Test1可以看出非集合&可變對(duì)象無論是copy還是mutableCopy,都是內(nèi)容拷貝深拷貝图贸。
Test2中會(huì)出現(xiàn)Crash蹂季,原因就是因?yàn)閙StrCy雖然是可變對(duì)象,但是所對(duì)應(yīng)的內(nèi)容是copy而來的不可變對(duì)象疏日。
三偿洁、非集合拷貝結(jié)論
從三個(gè)demo打印結(jié)果可以定論:
非集合copymutableCopy
不可變對(duì)象淺深
可變對(duì)象深深