作者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