将未引用的alloc'd对象添加到集合会导致泄漏吗?

时间:2010-11-29 05:43:10

标签: objective-c cocoa memory-management memory-leaks

以下行是否泄漏了此对象[[NSMutableDictionary alloc] init]

[myCollection setObject:[[NSMutableDictionary alloc] init] forKey:@"myDictionary"];

我认为它没有,因为对象永远不会被分配给引用...但同时我质疑它,因为我确实分配了对象......

以下工作是否可以替代?

[myCollection setObject:[NSMutableDictionary dictionary] forKey:@"myDictionary"];

1 个答案:

答案 0 :(得分:2)

第一个会泄漏,第二个不会泄漏。

将对象引用分配给变量根本不会影响对象的所有权。您调用alloc,这意味着您是所有者,无论您是否捕获该调用的结果。如果你不这样做,你就泄露了。

第二个选项([NSMutableDictionary dictionary])不会泄漏,因为+dictionary会返回一个非拥有(自动释放)的对象。

简而言之,你的直觉是正确的。恭喜!许多在这里提出记忆管理问题的人通常会弄错。 :)