Macks
Macks

Reputation: 1776

Changing reference to different object without changing initially referenced object?

I'm currently trying to write an XML-parser with the help of NSXMLParser. It's supposed generate an array of NSMutableDictionaries.

Making nested tags into nested dictionaries is really giving my brain a hard time. I might also note that I am very new to the language and this somewhat of an exercise for me.

My actual question is:

Say I have an NSMutableArray called xmlArray. This is the array that in the end should contain all elements including sub-elements of the xml-file – as an array of nested arrays and dictionaries.

Now I might have another variable called currentArray that references a specific sub-array of xmlArray.

This might look something like this:

currentArray = [xmlArray objectAtIndex: 3];

Now I might want to reference a different part of xmlArray using currentArray.

So what happens if I then do this:

currentArray = [xmlArray objectAtIndex: 5];

Isn't this the same as saying:

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

Am I switching my reference to a different object ([xmlArray objectAtIndex: 5]) or am I changing the initially referenced object ([xmlArray objectAtIndex: 3])?

How can I change the reference to a different object without changing the initially referenced object?

I'm aware that this is probably a really nooby question, I still hope someone might want to help. :) Thank you!!! :)

Upvotes: 0

Views: 52

Answers (1)

WDUK
WDUK

Reputation: 19030

This isn't how variables work.

What's going on?

NSMutableArray* currentArray is a variable, that will hold a pointer to the object we are dealing with. See the process of how this is used below:

This will get the pointer address of the object at index 3, and store it in current array:

currentArray = [xmlArray objectAtIndex: 3];

This will replace the value held in currentArray (which is only a pointer) with another pointer, this time to the object at index 5:

currentArray = [xmlArray objectAtIndex: 5];

The changing of the pointer within currentArray has no effect on the contents of the array itself.

This won't do anything either, as it's not resetting anything inside the array to change it's pointers at their indexes; it's just reading out of the array, not writing to it.

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

As to your question...

Am I switching my reference to a different object ([xmlArray objectAtIndex: 5]) or am I changing the initially referenced object ([xmlArray objectAtIndex: 3])?

You are switching your reference to the object, you are not changing the initial object. I highly suggest you read Intro to Objective-C, as well as introduction to C style programming, as variable management is fairly fundamental stuff.

Upvotes: 2

Related Questions