[我已经阅读了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'指向一个仍然保留的对象(由拥有的字典对象),并且我不必保留该对象来使用它。正确的吗?
感谢。
答案 0 :(得分:5)
Q1)返回与之前添加的Objective-C数组相同的指针。没有副本。
Q2)正确。数组中的所有项都归数组所有。如果某些东西拥有其他东西,它会保留一定数量。
从数组中删除对象时,保留计数会减少,并且对象可能会被释放。