我是否需要自己发布添加到NSDictionary的NSNumbers?

时间:2011-08-12 21:56:03

标签: ios memory-management

我正在创建一个将对象映射到整数的NSDictionary,并且因为NSDictionaries不处理除了对象之外的任何东西,我必须用[NSNumber numberWithInt:30]包装NSNumber对象中的每个整数或者你有什么。我不清楚的是我是否需要释放我正在创建的所有NSNumber对象。我实际上并没有为它们分配空间,因此它们必须位于自动释放池中,但我可以确定NSDictionary对象是否保留并正确释放它们?假设我正在设置

NSDictionary * myDict = [[NSDictionary alloc] initWithObjectsAndKeys: objectOne, [NSNumber numberWithInt: 30], nil];

当我完成它时,我正在正确发布NSDictionary(因为我在我自己的代码中为其分配空间)。

2 个答案:

答案 0 :(得分:2)

nope NSNumber对象是自动释放的。

将它们添加到NSDictionary将导致将保留消息发送到您添加的每个NSNumber对象。

根据内存管理规则,你不拥有这些对象 - NSDictionary以某种方式做到了 - 因此你不负责释放它们,NSDictionary对象就会这样做。

但你拥有使用alloc& amp;创建的NSDictionary。 initWithObjectsAndKeys :.因此,您需要注意管理myDict对象的内存。

答案 1 :(得分:1)

没有。你做得很好。

您正在将自动释放的NSNumber添加到字典中。字典将保留NSNumber,因此当它最终自动发布时,它仍然有效。

然而,只有几点,所以你不要粗心。您意识到NSNumber是关键,objectOne是存储在字典中的值?这没关系,因为NSNumber符合NSCopying协议,这是用作密钥的对象的要求。