这被认为是从原始字典中派生出新字典的更好方法:

[NSDictionary dictionaryWithDictionary:otherDictionary];

或者
[otherDictionary copy];



我们有时需要从一本不可变的字典中制作一个可变的字典,因此这个问题不断出现。也许没有,但是我很好奇,看看在某些用例中,哪一种比另一种更好。

编辑:我确实知道上述方法不能用于派生可变字典。我只是想以一般的方式提出问题,然后说明我每天如何面对这个问题。我应该对此更加清楚。

最佳答案

实际上,它们是不同的,但并非出于您期望的原因。我将假设您使用的是ARC(如果不使用,为什么呢?),所以返回对象的自动释放无关紧要。

它们的区别在于:考虑如果otherDictionarynil会发生什么。

好吧,如果您使用:

[otherDictionary copy]; // or -mutableCopy

您将获得nil,因为您有一个nil接收器。

另一方面,如果您使用:
[NS(Mutable)Dictionary dictionaryWithDictionary:otherDictionary];

无论NS(Mutable)Dictionary是否为otherDictionary,您都将取回nil

这在需要创建字典副本并随后需要NSDictionary实例,但又不想测试nil的情况下很好(可以降低循环复杂度!)。

关于objective-c - NSDictionary + dictionaryWithDictionary还是-copy?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17076974/

10-10 20:49
查看更多