Cocoa - NSDictionary objectForKey - 内存管理澄清

Sir*_*tty 1 cocoa memory-management nsdictionary

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

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

NSMutableDictionary *m_Dict;

...

m_Dict = [NSMutableDictionary dictionaryWithCapacity:10];
[m_Dict retain];
Run Code Online (Sandbox Code Playgroud)

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

NSMutableArray *array = [NSMutableArray arrayWithCapacity:100];
[m_Dict setObject:array forKey: @"myArray"];
Run Code Online (Sandbox Code Playgroud)

此时,我相信数组对象已被字典保留.因此,在将对象添加到字典之前,我不会保留该对象.它是否正确?

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

NSMutableArray *array = [m_Dict objectForKey: @"myArray"];
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Lot*_*har 5

Q1)返回与之前添加的Objective-C数组相同的指针.没有复制.

Q2)正确.数组中的所有项都归数组所有.如果某些东西拥有其他东西,它会保留对它的保留计数.

从数组中删除对象时,保留计数减少,对象(可能)被释放.