Adding Integer To NSMutableArray

前端 未结 3 430
花落未央
花落未央 2021-01-04 05:49

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 mill

相关标签:
3条回答
  • 2021-01-04 06:14

    NSMutableArray doesn't take primitive types.

    The second option is correct.

    0 讨论(0)
  • 2021-01-04 06:20

    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

    0 讨论(0)
  • 2021-01-04 06:37

    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)

    0 讨论(0)
提交回复
热议问题