我在哪里初始化NSMutableDictionary?

时间:2013-02-09 11:18:18

标签: iphone nsmutabledictionary

我有一个由更多子阵列组成的数组

我希望将子数组的内容摘要显示在TableView中,并显示每个条目的出现次数。我已经确定最好和最简单的方法是通过NSMutableDictionary作为中间步骤。

我在我的实现中声明了字典

@implementation ReviewViewController
{
NSMutableDictionary *dict;
}

在我的方法中,我初始化并使用它如下:

dict =  [NSMutableDictionary new];
[dict setObject:[Observation entryCount] forKey:[observedItem species]]; 

密钥和对象的交换是故意的,因为它是我想要的计数。我正在使用保留值的事实,但是键会被覆盖,所以如果我将它们交换掉,我就可以免费获得策展。

它有效!但是每次调用该方法时,字典都被重新初始化所破坏,所以我只能输入最后一个东西。其他任何地方都不在范围之内。

如果我将其作为方法名称中的争论传递,我会收到消息“本地声明'dict'隐藏实例变量”。代码已经是一组不可减少的部分,所以

那么,实例化的正确位置在哪里?

我很乐意在这里作出有意义的感谢,但在我能做到这一点之前,我会对这些问题感到愚蠢。

1 个答案:

答案 0 :(得分:0)

您通常会在init方法中对其进行初始化。对于视图控制器,通常如下:

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)bundle {
    if ((self = [super initWithNibName:nibName bundle:bundle])) {
        dict = [NSMutableDictionary new];
    }
    return self;
}

我不明白你的意思是“其他地方,它不属于范围。”这是一个实例变量。因此,它属于该类中任何方法的范围。

顺便说一下,我会用下划线前缀命名你的实例变量,例如: _dict。这是常见的约定,它可以帮助您记住使用它时它是一个实例变量。