【发布时间】:2015-07-29 07:13:13
【问题描述】:
我不知道这个问题之前是否被问过,我正在寻找一些好的答案。
问题是:每当有时我不将[[... alloc] init] 用于某些可变类时,我就会崩溃。
例子:
NSMutableDictionary *myDict = someObject ; //[allocation of some other dictionary object directly without using alloc , init].
对于某些阶段,编译器会在运行时警告我,您不能更改 myDict 中的值,即使它是可变的。
如果我写代码而不是这样:
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] initWithDictionary:someObject];
然后就可以了。
那么为什么需要alloc、init?或者实际上是什么问题?
谢谢。
【问题讨论】:
-
您确定没有将普通的
NSDictionary分配给NSMutableDictionary变量然后尝试对其进行变异吗? -
我将普通字典分配给 mutable object 。那有什么问题? @Fonix
-
好好想想,你不能改变一个不可变的
NSDictionary,即使它被分配给一个NSMutableDictionary变量类型,这并不意味着NSDictionary已经变成了一个NSMutableDictionary。你必须使用 alloc init 来完成它,以便它创建一个 NSMutableDictionary 与之前的 NSDictionary 具有相同的键/值 -
@RSD 你不能那样做。将对象分配给另一种类型不会更改对象的原始类型。如果要将
NSDictionary分配给NSMutableDictionary引用,则必须使用NSDictionary的mutableCopy方法。 -
不,没有可变对象,只是一个您误认为可变的指针。如果您需要一个可变副本,请创建一个可变副本:
NSMutableDictionary *myDict = [someObject mutableCopy]。