作者wfgh (lyle)
看板MacDev
標題[問題] copy跟retain有什麼不同?
時間Fri May 6 11:25:18 2011
如題
[object copy]與[object retain]有什麼不同呢?
兩者執行後object的retainCount都會加 1
是deep copy 跟 shallow copy的差別嗎?
感謝:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.147.33
1F:→ zonble:retain 是原來指標指向的物件被標記多使用了一次 05/06 11:45
2F:→ zonble:copy 會產生新物件 05/06 11:45
3F:→ wfgh:但產生新物件 為何他的retainCount不是1而是原來的+1呢? 05/06 11:47
4F:→ zonble:你看的是哪個物件?每個物件可以有不同的 copy 實作 05/06 11:58
5F:→ zonble:而且通常大部分是沒有實作 copy 的,一個物件要可以 copy 05/06 11:59
6F:→ zonble:需要另外實作 copyWithZone: 05/06 11:59
7F:→ wfgh:我用的是NSDictionary 05/06 12:03
8F:→ wfgh:所以沒有實作的意思就是他跟retain功能相同嗎? 05/06 12:03
9F:→ zonble:不是,如果一個物件沒有實作 copyWithZone:,一呼叫 copy 05/06 12:04
10F:→ zonble:就會馬上 crash。 05/06 12:05
11F:→ zonble:immutable 的物件有時候 copy 不見得會產生新物件 05/06 12:05
12F:→ wfgh:那我用[dictionary copy]為何他的ratainCopy會加1呢? 05/06 12:05
13F:→ zonble:因為多生一個物件的意義往往不大 05/06 12:06
14F:→ zonble:可能是 NSDictionary 把 copy 的實作成 retain,Foundation 05/06 12:07
15F:→ zonble:的一些實作經常改來改去。你可以試試看 copy 一個 05/06 12:07
16F:→ zonble:NSMutableDictionary 看看,可能就會出現不同的結果。 05/06 12:07
17F:推 offname:有些 immutable (array, dict)的 copy 和 retain ,沒差別 05/06 13:58
18F:→ offname:反正照著規矩來 retain-release, copy-release 就是了 05/06 14:03