指针和字典:复制还是存储?

时间:2013-04-02 16:25:34

标签: objective-c cocoa pointers memory nsdictionary

似乎存储在字典中的对象是原始对象的副本! 真奇怪!!

在以下代码中,

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);

我有两个不同的地址!

任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:3)

你只是打错了。 myEntriesDicomyEntries是两个不同的变量,其是相同的 - 这些值是引用。

当您将&myEntries传递给NSLog时,您传递的是对myEntries变量的引用,而不是其中的值,myEntriesDico也是如此。

删除两个&,它们将传递值作为引用,%p将正确格式化它们 - 两个输出应该相同。