Спросите о массиве int в Objective-C - PullRequest
1 голос
/ 13 ноября 2009

Код ниже - простая функция c #, возвращающая массив int. Я хотел бы знать, как преобразовать его в Objective-C

private int[] test()
{
    int[] a = new int[2];
    a[0] = 1;
    a[1] = 2;
    return a;
}

Ответы [ 4 ]

5 голосов
/ 13 ноября 2009

Следующий код должен работать:

- (NSArray *)test {
    NSArray *a = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], nil];
    return a;
}

Обратите внимание, что если бы мы создали NSArray с использованием [[NSArray alloc] initWithObjects:blah, blah, nil];, нам пришлось бы явно autorelease массив перед его возвратом, чтобы избежать утечки памяти. В этом случае, однако, NSArray создается с помощью удобного конструктора, поэтому массив для нас уже autorelease d.

Второй вопрос:

Попробуйте это:

- (NSMutableArray *)test:(int)count {
    NSMutableArray *a = [[NSMutableArray alloc] init];
    for (int i = 0; i < count; i++) {
        [a insertObject:[NSNumber numberWithInt:0] atIndex:i];
    }
    return [a autorelease];
}
3 голосов
/ 13 ноября 2009

Пример немного пустышки:

- (NSArray*) test{
  return [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], nil];
}

Некоторые заметки:

  • NSArray является неизменяемым типом - поэтому, если вы хотите добавить / удалить значения, вы должны использовать NSMutableArray вместо
  • Вы можете хранить только объекты в NSArray, поэтому вам нужно поместить их в NSNumber (или другой тип obj-c)
  • Obj-c - это расширенный набор C, поэтому вы можете свободно использовать c-массивы в своем коде obj-c, если хотите
2 голосов
/ 13 ноября 2009

Или альтернативный путь - использовать обычный код c (допускается в цели c):

int a[2]={1, 2};

Или в функции:

int *somefunc(void){
    static int a[2]={1, 2};
    return b;
}
1 голос
/ 13 ноября 2009

Существует два вида массивов в Objective-C: стандартные массивы C и массивы Cocoa NS. массивы C содержат примитивные целые числа, но довольно проблематичны из-за ограничений C. NSArrays должны содержать объекты, но вы можете просто обернуть целые числа в NSNumbers и вернуть значение int, когда тебе это нужно.

NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:500], [NSNumber numberWithInt:12000], nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...