Объявить динамический массив - PullRequest
1 голос
/ 17 августа 2010

Как я могу объявить динамический массив?Например:

int k=5;

Я хочу иметь массив, как показано ниже:

int myArray[k];

Ответы [ 5 ]

8 голосов
/ 24 августа 2011

Иногда действительно нужны настоящие массивы (не NSArray). Смотрите, например, indexPathWithIndexes: length: в NSIndexPath он принимает массив uintegers в качестве параметра. Для выделения массива вы должны использовать следующий подход:

    NSUInteger *arr = (NSUInteger*)malloc(elementsCount * sizeof(NSUInteger) );
    arr[0] = 100;
    free(arr);
8 голосов
/ 17 августа 2010

если я правильно прочитал вопрос .. (вряд ли на данный момент)

NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity:k];
7 голосов
/ 17 августа 2010

В 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 голосов
/ 18 декабря 2011

Ну, в моей книге нормально использовать VLA в Objective-C.

Так что-то вроде

int foo = 10;
int bar[foo];

разрешено. Конечно, это не динамический массив, как при автоматической настройке его размера. Но если вам нужен только собственный массив в стеке, это нормально.

1 голос
/ 23 марта 2013

Вы можете использовать Objetive-C ++.

Сначала переименуйте ваш класс следующим образом: MyClass.mm расширение ".mm" сообщает Xcode, что этот класс - класс 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;
}

Надеюсь, это было полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...