objective-c – NSDictionary dictionaryWithDictionary或-copy?

这被认为是从原始词典中导出新词典的更好方法
[NSDictionary dictionaryWithDictionary:otherDictionary];

要么

[otherDictionary copy];

不时,我们需要将一个不可变的字典变成一个不可变的字典,所以这个问题不断进来,也许没有,但我很好奇,看看在某些用例中,一个比另一个更好.

编辑:我知道上述方法不能用来派生一个可变字典.我只想以一般的方式提问,然后解释一下我今天面对这个问题.我应该更清楚这一点.

解决方法

其实他们是不同的,但不是因为你的期望.我会假设你正在使用ARC(如果你不是,为什么不这样),所以返回的对象的自动释放并不重要.

以下是它们的区别:考虑如果otherDictionary为零,会发生什么.

那么,如果你使用:

[otherDictionary copy]; // or -mutableCopy

你会收回零,因为你有一个零接收器.

另一方面,如果你使用:

[NS(Mutable)Dictionary dictionaryWithDictionary:otherDictionary];

你会得到一个NS(Mutable)词典,而不管otherDictionary是否为零.

在这种情况下,您需要创建一个字典的副本并且之后需要一个NSDictionary实例,但是您不想测试nil(yay来减少循环复杂度!).

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...