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