Как я могу создать пустой массив в цели C и присвоить ему значение одно за другим? - PullRequest
17 голосов
/ 25 февраля 2010

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

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

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

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

Ответы [ 3 ]

17 голосов
/ 25 февраля 2010

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

#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

10 голосов
/ 25 февраля 2010
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 в конец массива.
  • Поскольку NSArrays может хранить только ObjC, вы должны сначала "поместить" целое число в NSNumber.

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

std::vector<int> abc;
for (int i = 0; i < 10; ++ i)
   abc.push_back(i);
return abc;
3 голосов
/ 25 февраля 2010

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

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

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

...