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.
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 variable myNumber
, 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:
MyModelObject *myModelObject = [[[MyModelObject alloc] init] autorelease];
[myModelObject setNumber:[NSNumber numberWithDouble:42.0]];
[myArray addObject:myModelObject];
//Some time later, you decide to change the number.
[[myArray objectAtIndex:idx] setNumber:[NSNumber numberWithDouble:43.0]];
//Or:
for (MyModelObject *obj in myArray) {
[obj setNumber:1000.0];
}
*I mean Cocoa objects. The C language does call any pointer, int, etc. an “object”, but this is a different definition.