2010-05-05 6 views

Répondre

5

Une alternative à la réponse de mouviciel est d'utiliser la méthode getObjects:range: de NSArray.

id cArray[10]; 
NSArray *nsArray = [NSArray arrayWithObjects:@"1", @"2" ... @"10", nil]; 

[nsArray getObjects:cArray range:NSMakeRange(0, 10)]; 

Ou, si vous ne savez pas combien d'objets sont dans le tableau à la compilation:

NSUInteger itemCount = [nsArray count]; 
id *cArray = malloc(itemCount * sizeof(id)); 

[nsArray getObjects:cArray range:NSMakeRange(0, itemCount)]; 

... do work with cArray ... 

free(cArray); 
1

Si vous avez besoin de votre tableau C pour transporter des objets, vous pouvez le déclarer comme:

id cArray[ ARRAY_COUNT ]; 

ou

id * cArray = malloc(sizeof(id)*[array count]); 

Ensuite, vous pouvez remplir à l'aide d'une boucle:

for (int i=0 ; i<[array count] ; i++) 
    cArray[i] = [array objectAtIndex:i]; 
+0

Les objets doivent être conservés tels qu'ils sont placés dans le tableau c (c.-à-d., [cArray [i] retain]) car NSArray pourrait être libéré, libérant ainsi tous les objets qu'il contient. – yabada

+1

L'utilisation de 'getObjects: range:' serait plus rapide. – dreamlax

Questions connexes