声明动态数组

时间:2010-08-17 19:27:18

标签: objective-c

如何声明动态数组?例如:

int k=5;

我想要一个如下所示的数组:

int myArray[k];

5 个答案:

答案 0 :(得分:8)

如果我正确地阅读了这个问题..(此时不太可能)

NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity:k];

答案 1 :(得分:8)

有时确实需要真正的数组(不是NSArray)。参见例如indexPathWithIndexes:length:在NSIndexPath中,它将uintegers数组作为参数。对于数组分配,您应该使用以下方法:

    NSUInteger *arr = (NSUInteger*)malloc(elementsCount * sizeof(NSUInteger) );
    arr[0] = 100;
    free(arr);

答案 2 :(得分:7)

在Objective-C中,执行此操作的标准方法是使用NSMutableArray类。这是一个可以容纳任何对象的容器(注意int不是对象!你必须将整数包装在NSNumber中。)快速示例:

NSMutableArray* someIntegers = [[NSMutableArray alloc] initWithCapacity:1];
[someIntegers addObject:[NSNumber numberWithInt:2]];
//I've added one thing to my array.

[someIntegers addObject:[NSNumber numberWithInt:4]];
//See how I can put more objects in than my capacity allows?
//The array will automatically expand if needed.


//The array now contains 2 (at index 0) and 4 (at index 1)


int secondInteger = [[someIntegers objectAtIndex:1] intValue];
//Retrieving an item. -intValue is needed because I stored it as NSNumber,
//which was necessary, because NSMutableArray holds objects, not primitives.

答案 3 :(得分:3)

Well in my book it's ok to use VLAs in Objective-C.

类似

int foo = 10;
int bar[foo];

是允许的。当然,这不是动态数组,而是自动调整其大小。但如果您只需要堆栈上的本机数组就可以了。

答案 4 :(得分:1)

您可以使用Objetive-C ++。

首先像这样重命名你的类:MyClass.mm“。mm”扩展告诉Xcode这个clas是一个Objetive-C ++类,而不是一个Objetive-C类。

那么你可以像这样使用动态C ++数组:

int *pixels = new int[self.view.size.width];

for (int offset = 0; offset = self.view.size.width; offset++) {
    pixeles[offset] = rawData[offset];
}

然后你可以在方法中传递“像素”:

Scan *myScan = [[Scan alloc] initWhithArray:pixels];

方法“initWithScan”声明如下:

-(id)initWithArray:int[]pixels;

“initWithScan”实现是这样的:

-(id)initWithScan:int[]pixels {
    if (self = [super init]) {
        for (int i = 0; i < self.myView.size.width; i++) {
            NSLog(@"Pixel: %i", pixels[i];
        }
    }
    return self;
}

我跳这是有用的。