初始化一个 NSDictionary

Posted

技术标签:

【中文标题】初始化一个 NSDictionary【英文标题】:Initializing an NSDictionary 【发布时间】:2016-07-06 07:34:45 【问题描述】:

这样初始化一个NSDictionary有什么区别:

self.myData = [[NSDictionary alloc] init];
[self.myData initWithObjects:objects forKeys:keys];

或者这样:

self.myData = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];

因为我问这个问题的原因是第一个问题不起作用。我是新手,很想知道为什么?

这是我的代码:-

【问题讨论】:

请发布代码而不是链接到 png 这是因为您分配和初始化字典两次。分配一次,然后设置它的键和值(添加对象)。在您的第二种方式中,您正在分配和初始化对象并使用它设置对象以使其正常工作! 知道了。谢谢你的帮助。 @狮子 【参考方案1】:

第一个版本调用了两次 init,这在大多数情况下是一件非常非常糟糕的事情,但对于像 NSDictionary 这样的内置类来说尤其糟糕。我从来没有尝试过,但它应该崩溃,因为你初始化了一个不可变的字典,第二次初始化尝试会修改它。

【讨论】:

我不同意“第二次尝试初始化会修改它”的说法,因为当涉及alloc/init 时,可变性不是问题。我不明白为什么它被接受为 the 答案,但我希望这是因为回答者的代表数量。 是的,现在我完全理解了这个概念。 兄弟有没有更好的解决方案? @Droppy 但这不是我要问的你没有得到我我已经解决了它,然后通过简单地做:- self.myData=[[NSDictionary alloc]initWithObjects:objects forKeys:keys] ;我只是想问一下区别,我想现在我明白了。@Droppy【参考方案2】:

你可以这样初始化你的字典:

self.myData = @ @"key1" : object1, 
                 @"key2" : object2
                 // etc.
               ;

【讨论】:

以上是关于初始化一个 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

静态成员初始化取决于另一个类的成员的初始化

Java Scanner 没有在一个 string() 中初始化,即使它在另一个中初始化

OneExerciseOne创建一个类,它包含一个int域,一个char域,他们都没有初始化,验证Java执行了默认初始化

在一个类中初始化一个向量?

初始化一个计算变量

C++默认初始化和值初始化:哪个是哪个,啥时候调用以及如何可靠地初始化一个模板类型成员