更改对不同对象的引用而不更改最初引用的对象?

时间:2012-11-07 17:27:57

标签: objective-c xcode macos cocoa

我目前正在尝试在NSXMLParser的帮助下编写XML解析器。它应该生成一个NSMutableDictionaries数组。

将嵌套标签嵌入到嵌套字典中确实让我的大脑变得困难。我可能还会注意到,我对这门语言很陌生,对我来说这是一种练习。

我的实际问题是:

假设我有一个名为xmlArray的NSMutableArray。这个数组最后应该包含所有元素,包括xml文件的子元素 - 作为嵌套数组和字典的数组。

现在我可能有另一个名为currentArray的变量引用xmlArray的特定子数组。

这看起来像这样:

currentArray = [xmlArray objectAtIndex: 3];

现在,我可能希望使用xmlArray引用currentArray的其他部分。

那么如果我这样做会发生什么:

currentArray = [xmlArray objectAtIndex: 5];

这不是说:

[xmlArray objectAtIndex: 3] = [xmlArray objectAtIndex: 5];

我是否将我的引用切换为其他对象([xmlArray objectAtIndex: 5]),还是我更改了最初引用的对象([xmlArray objectAtIndex: 3])?

如何在不更改最初引用的对象的情况下更改对其他对象的引用?

我知道这可能是一个非常愚蠢的问题,我仍然希望有人可能想要帮助。 :) 谢谢!!! :)

1 个答案:

答案 0 :(得分:2)

这不是变量的工作原理。

发生了什么事?

NSMutableArray* currentArray是一个变量,保持 指针到我们正在处理的对象。请参阅下面的使用方法:

这将获得索引3处对象的指针地址,并将其存储在当前数组中:

currentArray = [xmlArray objectAtIndex: 3];

这会将currentArray(只是指针)中的值替换为另一个指针,这次是指向索引5处的对象:

currentArray = [xmlArray objectAtIndex: 5];

currentArray内指针的更改对数组本身的内容有 no 影响。

这也不会做任何事情,因为它没有重置数组中的任何内容来改变它们的索引指针;它只是读出数组而不是写入数据。

[xmlArray objectAtIndex: 3] = [xmlArray objectAtIndex: 5];

关于你的问题......

  

我将引用切换到另一个对象([xmlArray objectAtIndex:5])还是我更改了最初引用的对象([xmlArray objectAtIndex:3])?

您正在切换对象的引用,而不是更改初始对象。我强烈建议你阅读Intro to Objective-C,以及C风格编程的介绍,因为变量管理是相当基础的东西。