在iOS中创建一个整数数组

neu*_*cer 94 objective-c ios

如果要创建整数数组,可以使用NSInteger吗?你必须使用NSNumber吗?如果是这样,为什么呢?

dre*_*lax 157

您可以使用普通的旧C数组:

NSInteger myIntegers[40];

for (NSInteger i = 0; i < 40; i++)
    myIntegers[i] = i;

// to get one of them
NSLog (@"The 4th integer is: %d", myIntegers[3]);
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用NSArrayNSMutableArray,但是在这里您需要将NSNumber实例中的每个整数包装起来(因为NSArray对象被设计为包含类实例).

NSMutableArray *myIntegers = [NSMutableArray array];

for (NSInteger i = 0; i < 40; i++)
    [myIntegers addObject:[NSNumber numberWithInteger:i]];

// to get one of them
NSLog (@"The 4th integer is: %@", [myIntegers objectAtIndex:3]);

// or
NSLog (@"The 4th integer is: %d", [[myIntegers objectAtIndex:3] integerValue]);
Run Code Online (Sandbox Code Playgroud)

  • 我认为值得注意的是C阵列对于除了微不足道的一次性使用之外的任何事情都是如此麻烦,因此将你计划保留的任何阵列包装为NSNr的NSArrays实际上不那么麻烦. (8认同)
  • 是的,考虑到[NSArray`引擎下的[推测]专家级优化,我相信你不会觉得性能受到影响. (2认同)
  • @Andy:看一下CFArray的实际来源[这里](http://www.opensource.apple.com/source/CF/CF-476.14/CFArray.c)并查看基准[这里](http) ://ridiculousfish.com/blog/posts/array.html).它比你最初想象的要聪明一些. (2认同)

Fré*_*dda 54

C数组:

NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Run Code Online (Sandbox Code Playgroud)

Objective-C数组:

NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
Run Code Online (Sandbox Code Playgroud)

Swift数组:

var array = [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

这也是正确的:

var array = Array(1...10)
Run Code Online (Sandbox Code Playgroud)

注意:数组在Swift中是强类型的; 在这种情况下,编译器从内容中推断出数组是整数数组.您也可以使用此显式类型语法:

var array: [Int] = [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

如果你想要一个双打数组,你会使用:

var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
Run Code Online (Sandbox Code Playgroud)

要么:

var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
Run Code Online (Sandbox Code Playgroud)


Den*_*sie 5

如果你想使用NSArray,你需要一个Objective-C类来加入它 - 因此需要NSNumber.

也就是说,Obj-C仍然是C,因此如果需要,你可以使用常规的C数组并保持常规的int而不是NSNumbers.


coy*_*508 5

您可以使用CFArray代替 NSArray。是一篇解释如何操作的文章。

CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
  CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
Run Code Online (Sandbox Code Playgroud)

这同样适用于其他容器的 CoreFoundation 版本。

  • 如果使用 CFArray 比 NSArray 有优势,我看不到。NSArray 是引擎盖下的 CFArray;这只是以艰难的方式去做。 (3认同)