mat*_*hat 11 objective-c foundation
这被认为是从原始字典派生新字典的更好方法:
[NSDictionary dictionaryWithDictionary:otherDictionary];
Run Code Online (Sandbox Code Playgroud)
要么
[otherDictionary copy];
Run Code Online (Sandbox Code Playgroud)
?
我们不时需要用一个不可变的字符来制作一个可变字典,所以这个问题一直存在.也许没有,但我很想知道在某些用例中是否有一个比另一个好.
编辑:我知道上述方法不能用于派生可变字典.我只是想以一般方式提出问题,然后解释我每天如何面对这个问题.我应该更清楚这一点.
Dav*_*ong 33
实际上,它们是不同的,但不是因为你期望的原因.我假设你正在使用ARC(如果你不是,为什么不呢?),所以返回对象的自动释放无关紧要.
下面是它们之间的区别:考虑是否发生了什么otherDictionary是nil.
好吧,如果你使用:
[otherDictionary copy]; // or -mutableCopy
Run Code Online (Sandbox Code Playgroud)
你会回来的nil,因为你有一个nil接收器.
另一方面,如果您使用:
[NS(Mutable)Dictionary dictionaryWithDictionary:otherDictionary];
Run Code Online (Sandbox Code Playgroud)
你会回来的NS(Mutable)Dictionary,无论otherDictionary是nil或不是.
这在你需要创建字典副本并且NSDictionary之后需要实例的情况下很好,但你不想测试nil(为了减少圈复杂度!).
这个问题有几个方面:
首先,这两者略有不同:
[NSDictionary dictionaryWithDictionary:otherDictionary]; #1
[otherDictionary copy]; #2
Run Code Online (Sandbox Code Playgroud)
#1返回一个自动释放的对象(即一个具有+0保留计数的对象); #2返回一个具有+1保留计数的对象,因此调用者负责release在某个时刻进行调用.
(如果otherDictionary是,它们也略有不同nil:#1返回一个空字典,而#2返回nil.)
当然,在你的问题中,你实际上是在询问可变副本.请注意,您可以执行以下任一操作:
[NSMutableDictionary dictionaryWithDictionary:otherDictionary];
[otherDictionary mutableCopy];
Run Code Online (Sandbox Code Playgroud)
与上述相同的警告适用于这些方法中的每一种.
本身可能没有最好的方法,但是mutableCopy最清楚(只记得你必须在某个时候释放保留的对象).
| 归档时间: |
|
| 查看次数: |
11326 次 |
| 最近记录: |