Iphone 在哪里初始化NSMutable字典?

Iphone 在哪里初始化NSMutable字典?,iphone,nsmutabledictionary,Iphone,Nsmutabledictionary,我有一个由更多子数组组成的数组 我想在TableView中显示子数组内容的摘要,并显示每个条目的出现次数。我已经确定,最好和最简单的方法是通过NSMutableDictionary作为中间步骤 我在实现中声明字典 @implementation ReviewViewController { NSMutableDictionary *dict; } 在我的方法中,我初始化并像这样使用它: dict = [NSMutableDictionary new]; [dict setObject:[Ob

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

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

我在实现中声明字典

@implementation ReviewViewController
{
NSMutableDictionary *dict;
}
在我的方法中,我初始化并像这样使用它:

dict =  [NSMutableDictionary new];
[dict setObject:[Observation entryCount] forKey:[observedItem species]]; 
键和对象的交换是经过深思熟虑的,因为这是我想要的计数。我使用的是保留值的事实,但是键被覆盖,所以如果我交换它们,我就可以免费获得策展

它起作用了!,但是每次调用该方法时,字典都会被重新初始化所破坏,所以我只会得到最后输入的内容。任何其他地方,它都不在范围之内

如果将其作为参数传递到方法名称中,则会得到消息“Local declaration of'dict'隐藏实例变量”。代码已经是一组不可还原的部分,所以

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


我很想在这里表达我的贡献,作为一种有意义的感谢,但在我能做到这一点之前,我对这些问题会显得很傻。

您通常会在
init
方法中初始化它。对于视图控制器,这通常如下所示:

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)bundle {
    if ((self = [super initWithNibName:nibName bundle:bundle])) {
        dict = [NSMutableDictionary new];
    }
    return self;
}
我不明白你所说的“任何其他地方,它都不在范围之内”是什么意思。它是一个实例变量。因此,它在类中任何方法的范围内


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

在[ObserveItem species]中有什么?谢谢。同时,最简单的位置ViewDidLoad也起到了作用,但如果initWithNibName更为传统的话。我认为下划线只用于强制合成属性。活到老学到老,我只活了两次。
viewDidLoad
是个不错的地方。这完全取决于该对象的生命周期。如果字典位于
viewDidLoad
中,则每次加载视图时,字典都将初始化为一个新的空字典。这可能是你想要的,也可能不是。