Cocoa - NSDictionary objectForKey - 内存管理澄清

时间:2010-09-01 02:51:09

标签: cocoa memory-management nsdictionary

[我已经阅读了Cocoa内存管理规则,但仍然希望确定,并且想知道这是否是一个好的形式。]

我的班级有一个可变字典ivar:

NSMutableDictionary *m_Dict;

...

m_Dict = [NSMutableDictionary dictionaryWithCapacity:10];
[m_Dict retain];

在某些时候,我会在字典中添加一个可变数组:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:100];
[m_Dict setObject:array forKey: @"myArray"];

此时,我相信字典对象已被保留。因此,在将对象添加到字典之前,我不保留对象。这是对的吗?

稍后,我将访问该数组,以供阅读:

NSMutableArray *array = [m_Dict objectForKey: @"myArray"];

Q1。 objectForKey返回了什么内容?它是指向字典中保存的对象的指针吗?或指向对象的COPY的指针? (我假设只返回指向现有对象的指针。)

Q2 即可。这里发生了什么,记忆管理明智吗?我假设'array'指向一个仍然保留的对象(由拥有的字典对象),并且我不必保留该对象来使用它。正确的吗?

感谢。

1 个答案:

答案 0 :(得分:5)

Q1)返回与之前添加的Objective-C数组相同的指针。没有副本。

Q2)正确。数组中的所有项都归数组所有。如果某些东西拥有其他东西,它会保留一定数量。

从数组中删除对象时,保留计数会减少,并且对象可能会被释放。