NSNumber与NSArray的原始int

Sco*_*ott 4 cocoa objective-c

我正在使用第四版Cocoa Programming for Mac OSX学习Objective-C/Cocoa.我为基本问题道歉,但我是那些真正需要了解所有内容的人之一,以便对我有意义,而本书并不总能满足我的需求.我已经掌握了C++的基础知识,现在我正在学习Obj-C,这就是我的背景.这是我正在学习的一段代码......

for (i= 0; i < 10; i++) {
    NSNumber *newNumber = [[NSNumber alloc] initWithInt:(i * 3)];
    [array addObject:newNumber];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么你要创建NSNumber的实例来添加到数组而不是只是一个整数变量.看起来这只是额外的开销,可以避免每个循环创建一个新实例.但我确信作者知道他们在做什么,并且有理由,有人可以解释一下吗?

Aar*_*ger 6

NSArray只能保存对象,而不能保存原始类型.NSNumber和NSValue用于在对象中包装基本类型,因此它们可以存储在基础集合中,如NSArray,NSDictionary和NSSet(以及它们的可变/有序对应物).正如Peter Hosey在评论中指出的那样:

常见的术语是"装箱"(就像装箱一样),反向提取箱子对象的原始值 - 是拆箱.