Adding Integer To NSMutableArray

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?

  • Swift how to sort array of custom objects by property value
  • Saving array using NSUserDefaults crashes app
  • Objective-C: Count the number of times an object occurs in an array?
  • Why NSNumber points to the same address when value are equals?
  • How to add two NSNumber objects?
  • How to filter the multiple selected values from an array and load it to other uitableview from a uibutton
  • (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]];
    

    3 Solutions Collect From Internet About “Adding Integer To NSMutableArray”

    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)

    As stated by the previous replies, you can only add objects (id type) to container classes like NSArray.

    One class that can be helpful in this context is NSValue, which serves as a container for non-object data types of C and objective-C. In addition to numerical data types, this can also contain structs and some objective-C primitive data types like NSRect.

    Look here for more details:
    https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsvalue_Class/Reference/Reference.html