I couldn't find this anywhere, so I am asking just asking to make sure. And yes, I know its basic, but I figure I'd rather get that right before I make the mistake a million times:
If I do the following, does it cast the "0" to an NSNumber by default (if not, what Object type is it), or would I have to do the 2nd code?
(Or both of these could be wrong for what I'm trying to do. If so, let me know. They both compile so I am just wondering which one is "right" (or preferred) and why.)
Code 1:
NSMutableArray array = [[[NSMutableArray alloc] init]];
[array addObject: 0];
Code 2:
NSMutableArray array = [[NSMutableArray alloc] init];
[array addObject: [NSNumber numberWithInt: 0]];
NSMutableArray
doesn't take primitive types.
The second option is correct.
You cannot put a primitive such as an int
into an NSArray
; you must construct an NSNumber
instance to hold it.
If I do the following, does it cast the "0" to an NSNumber by default (if not, what Object type is it)
No casting takes place. It's not possible to simply "cast" a primitive into an object, and the primitive does not have an object type. Objects must be constructed by sending messages (except: see below), which happens at runtime; casting only has an effect during compilation.
The only reason this works is that you have chosen 0
to add to the array. This is the same value as nil
, which stands for "no object". If you had chosen any other integer, you would have a crash on your hands when you ran the code, since the value would be used as a pointer to memory that doesn't hold a valid object.
Interestingly, though, starting with Clang 3.1 or Apple's LLVM 4.0,* there is some new syntatical sugar for creating objects from literals in code. We've always had literal NSStrings
: @"Lichtenstein"
. With the new compiler, other objects can likewise be created using the @
character.
In this case, to create an NSNumber
object from a literal integer, you can simply write:
[array addObject:@0];
*(not yet available in public Xcode)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With