【发布时间】:2013-03-24 01:15:00
【问题描述】:
似乎存储在字典中的对象是原始对象的副本! 好奇怪!!
在下面的代码中,
myData = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:myEntries, preambule, nil]
forKeys:[NSArray arrayWithObjects:@"myEntries", @"preambule", nil]];
NSMutableArray * myEntriesDico = [myData objectForKey:@"myEntries"] ;
NSLog(@"!!!!!!!!! Address of myEntries (in the le dict) : %p", &myEntriesDico);
NSLog(@"!!!!!!!!! Address of myEntries : %p", &myEntries);
我有两个不同的地址!
有人知道发生了什么吗?
【问题讨论】:
-
始终是 DeepCopy。
-
@AnoopVaidya:我不确定你所说的“它”是什么,但 AFAIK Cocoa 没有深度复制功能。
-
我是不是说反之亦然... Deep 意味着 byValue ,浅层意味着 byRef... :(
-
@AnoopVaidya - 对于引用类型(例如
NSObject *),然后(a)赋值复制值(引用)(b)浅拷贝创建引用类型的新对象并分配值源对象的实例变量与新对象的实例变量 (c) 深度复制 (b) 递归执行 - 如果任何源对象实例变量是引用类型,则为这些对象创建新对象。除非另有说明,否则 Obj-C 集合只是进行赋值(通常使用保留),它们不会浅拷贝或深拷贝对象。 -
@CRD:我卡住了。我有一本字典,添加了一个字符串 = @“A”。后来我更新了字符串=@“B”。字典没有反映@"B",它仍然有@"A"。
标签: objective-c cocoa pointers memory nsdictionary