将整数添加到NSMutableArray

MrH*_*hma 13 arrays object objective-c nsnumber

我无法在任何地方找到这个,所以我只是要求确认.是的,我知道它是基本的,但我想在我犯错百万次之前我宁愿做到这一点:

如果我执行以下操作,默认情况下是否将"0"转换为NSNumber(如果不是,它是什么对象类型),还是我必须执行第二个代码?

(或者这两个对我正在尝试的事情都可能是错误的.如果是这样,请告诉我.他们都编译,所以我只是想知道哪一个是"正确"(或首选)以及为什么.)

代码1:

NSMutableArray array = [[[NSMutableArray alloc] init]];
[array addObject: 0];
Run Code Online (Sandbox Code Playgroud)

代码2:

NSMutableArray array = [[NSMutableArray alloc] init];
[array addObject: [NSNumber numberWithInt: 0]];
Run Code Online (Sandbox Code Playgroud)

Dan*_*ock 21

NSMutableArray 不采用原始类型.

第二种选择是正确的.


Jos*_*ell 6

你不能把诸如a之类的原语int放入NSArray; 你必须构造一个NSNumber实例来保存它.

如果我执行以下操作,默认情况下它是否将"0"强制转换为NSNumber(如果不是,它是什么对象类型)

不进行铸造.将基元简单地"转换"为对象是不可能的,并且基元没有对象类型.必须通过发送消息来构造对象(除了:见下文),这些消息在运行时发生; 转换只在编译期间有效.

这种方法的唯一原因是您已选择0添加到数组中.这是与nil"无对象" 相同的值.如果您选择了任何其他整数,则在运行代码时会出现崩溃,因为该值将用作指向不包含有效对象的内存的指针.

有趣的是,从Clang 3.1或Apple的LLVM 4.0开始,*有一些新的合成糖用于在代码中从文字创建对象.我们总是有文字NSStrings:@"Lichtenstein".使用新编译器,同样可以使用该@字符创建其他对象.

在这种情况下,NSNumber要从文字整数创建对象,您只需编写:

[array addObject:@0];
Run Code Online (Sandbox Code Playgroud)

*(尚未在公共Xcode中提供)