【问题标题】:Cocoa - NSDictionary objectForKey - memory management clarificationCocoa - NSDictionary objectForKey - 内存管理说明
【发布时间】:2010-09-01 02:51:09
【问题描述】:

[我已经阅读了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 返回什么?它是指向字典中保存的对象的指针吗?还是指向对象副本的指针? (我假设只是返回一个指向现有对象的指针。)

第二季度。这里发生了什么,内存管理明智?我假设“数组”指向一个仍然保留(由拥有的字典对象)的对象,并且我不必保留该对象来使用它。对吗?

谢谢。

【问题讨论】:

    标签: cocoa memory-management nsdictionary


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 2014-07-29
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2023-03-29
      • 2011-05-14
      相关资源
      最近更新 更多