2010-03-03 5 views
1

Je vérifiais this question qui a ce codeCollections extensibles en Objective-C?

- (NSArray *) percentagesRGBArray:(float[]) rgbArray 
{ 
    NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
    NSNumber *green = [NSNumber numberWithFloat:rgbArray[1]/255]; 
    NSNumber *blue = [NSNumber numberWithFloat:rgbArray[2]/255]; 
    NSNumber *alpha = [NSNumber numberWithFloat:rgbArray[3]]; 
    return [NSArray arrayWithObjects:red, green, blue, alpha, nil]; 
} 

et je pensais, «c'est terrible, si vous avez plus de trois couleurs? » Je sais, vous n'avez pas, mais que faire si vous avez eu count-1 couleurs et un alpha? Supposons que vous ayez [rgbArray count] (est-ce que cela fonctionne même pour un tableau réel?) En utilisant uniquement l'objectif-C, comment normalement retourner un objet NSArray de n?

J'ai juste essayé de m'en sortir mais je n'ai toujours pas les côtelettes pour faire ça dans l'objectif-C. Voici ma tentative échouée:

- (NSArray *) what:(float[]) rgbArray 
{ 
    int len = sizeof(rgbArray)/sizeof(float); // made up syntax 
    NSLog(@"length is wrong dummy %d", len); 
    NSNumber *retVal[len]; 
    for (int i=0;i<(len-1);i++) { 
     NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
     retVal[i] = red; 
     [red release]; 
    } 
    retVal[len-1] = [NSNumber numberWithFloat:rgbArray[len-1]]; 
    return [NSArray arrayWithObjects:retVal count:len]; 

} 

Répondre

1

Eh bien, tout comme arrayWithObjects:count: a count: partie, vous pouvez faire

- (NSArray *) what:(float[]) rgbArray count:(int)len 
{ 
    NSMutableArray*result=[NSMutableArray array]; 
    for (int i=0;i<len;i++) { 
     NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
     [result addObject:red]; 
    } 
    return result; 
} 

Si vous voulez, je peux être aussi proche que ce que vous avez écrit, ce qui serait

- (NSArray *) what:(float[]) rgbArray count:(int)len 
{ 
    NSNumber**retVal=malloc(len*sizeof(NSNumber*)); 
    for (int i=0;i<len;i++) { 
     NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
     retVal[i]=red; 
    } 
    NSArray*result=[NSArray arrayWithObjects:retVal count:len]; 
    free(retVal); 
    return result; 
} 

A ce stade , ce n'est pas vraiment une question d'Objective-C, mais une question de C simple, n'est-ce pas? Vos questions sont

  1. comment allouer dynamiquement un tableau en C et
  2. comment obtenir la taille d'un tableau d'une fonction en C.

Les réponses sont

  1. Vous utilisez malloc.
  2. Vous ne pouvez pas faire cela, vous devez donc passer à la fonction.

C'est tout. Donc, si vous avez une question sur la façon de traiter les tableaux, vous devriez demander aux experts C ... il n'y a rien de spécial à propos d'Objective-C, sauf la syntaxe de déclaration de méthode.

+0

Très cool. Maintenant que je vois votre code, je vois le manque de précision dans ma question. Je vais tester certains de ces trucs et commenter si j'ai des doutes. Merci! –

5

Vous pouvez utiliser un NSMutableArray.

Vous pouvez ajouter & supprimer des éléments et c'est une sous-classe de NSArray afin qu'il puisse être transmis à n'importe quelle méthode attend un NSArray.