I have this little code
NSMutableArray *myArray = [[NSMutableArray alloc] init];
NSNumber *myNumber = [NSNumber numberWithDouble:752.65];
[myArray addObject:myNumber];
With this code I store Objects inside an array. But now I have two objects independent from each other.
If I change myNumber after it's been added to the array the value inside the array does not change. How can I archive that? I tried to give a pointer only to the array but it did not work.
Best Solution
You cannot put a variable into an array, and that's what
myNumber
is: a variable. A variable is a container, and so is an array; the difference is that a variable is not also an object*, like the array is, and you can only put objects into an array.What you pass to
addObject:
is not the variablemyNumber
, but the object it contains. That's what you are adding to the array.To add the variable instead of the object inside it, you would need to do
addObject:&myNumber
, in order to pass a pointer to the variable itself. But this won't work, for two reasons:There are three solutions that will work:
That last solution is, in my opinion, the correct one. I doubt you are managing only a list of numbers; more likely, you are showing the user a list of something that has the number as a property. Model this in your code, and everything becomes much simpler.
Your code after replacing the bare NSNumbers with model objects will be something like:
*I mean Cocoa objects. The C language does call any pointer, int, etc. an “object”, but this is a different definition.