Как я могу создать пустой массив в цели C и присвоить значение в него один за другим?

В Java я могу сделать это:

int[] abc = new int[10];
for(int i=0; i<abc.length; i++){
   abc[i] = i;
}

Как я могу реализовать подобную вещь в Objective C?

Я вижу, что некоторый ответ использует NSMutableArray, вес, отличающийся между этим и NSArray?

17
задан Tattat 25 February 2010 в 15:26
поделиться

3 ответа

Попробуйте сделать что-то вроде этого.

#import <foundation/foundation.h>
int main (int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSMutableArray *myArray = [NSMutableArray array];
    [myArray addObject:@"first string"];
    [myArray addObject:@"second string"];
    [myArray addObject:@"third string"];
    int count = [myArray count];
    NSLog(@"There are %d elements in my array", count);
    [pool release];
    return 0;
}

Цикл будет выглядеть так:

NSString *element;
int i;
int count;
for (i = 0, count = [myArray count]; i < count; i = i + 1)
{
   element = [myArray objectAtIndex:i];
   NSLog(@"The element at index %d in the array is: %@", i, element);
}

См. CocoLab

17
ответ дан 30 November 2019 в 12:35
поделиться
NSMutableArray* abc = [NSMutableArray array];
for (int i = 0; i < 10; ++ i)
   [abc addObject:[NSNumber numberWithInt:i]];
return abc;

Здесь,

  • NSMutableArray - это "изменяемый" тип массива. Существует также супертип постоянного массива NSArray. В отличие от C++, массив ObjC не типизирован. Вы можете хранить любые объекты ObjC в массиве NSArray.
  • -addObject: добавляет объект ObjC в конец массива.
  • Поскольку NSArray может хранить только ObjC, вам придется сначала "упаковать" целое число в NSNumber.

На самом деле это больше похоже на код C++

std::vector<int> abc;
for (int i = 0; i < 10; ++ i)
   abc.push_back(i);
return abc;
10
ответ дан 30 November 2019 в 12:35
поделиться

Я вижу ответ при использовании NSMutableArray, чем отличается this от NSArray?

NSArray является неизменяемым : его нельзя изменить. NSMutableArray - это изменяемый подкласс, который добавляет методы в интерфейс массива, позволяющие манипулировать его содержимым. Этот шаблон наблюдается во многих местах в Какао: NSString , NSSet и NSDictionary - особенно частые примеры, которые все являются неизменяемыми объектами с изменяемыми подклассами.

Самая большая причина этого - эффективность. Вы можете делать предположения об управлении памятью и безопасности потоков с неизменяемыми объектами, которые вы не можете сделать с объектами, которые могут измениться из-под вас.

3
ответ дан 30 November 2019 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: