Retourne le tableau de la fonction en Objective-C

Le langage de programmation Objective-C ne permet pas de renvoyer un tableau entier en argument d'une fonction. Cependant, vous pouvez renvoyer un pointeur vers un tableau en spécifiant le nom du tableau sans index. Vous étudierez le pointeur dans le chapitre suivant afin de pouvoir sauter ce chapitre jusqu'à ce que vous compreniez le concept des pointeurs en Objective-C.

Si vous souhaitez renvoyer un tableau unidimensionnel à partir d'une fonction, vous devrez déclarer une fonction renvoyant un pointeur comme dans l'exemple suivant -

int * myFunction() {
.
.
.
}

Le deuxième point à retenir est qu'Objective-C ne recommande pas de renvoyer l'adresse d'une variable locale à l'extérieur de la fonction, vous devrez donc définir la variable locale comme static variable.

Maintenant, considérez la fonction suivante, qui générera 10 nombres aléatoires et les renverra en utilisant un tableau et appelez cette fonction comme suit -

#import <Foundation/Foundation.h>

@interface SampleClass:NSObject
- (int *) getRandom;
@end

@implementation SampleClass

/* function to generate and return random numbers */
- (int *) getRandom {
   static int  r[10];
   int i;

   /* set the seed */
   srand( (unsigned)time( NULL ) );
   for ( i = 0; i < 10; ++i) {
      r[i] = rand();
      NSLog( @"r[%d] = %d\n", i, r[i]);
   }

   return r;
}

@end

/* main function to call above defined function */
int main () {
   
   /* a pointer to an int */
   int *p;
   int i;

   SampleClass *sampleClass = [[SampleClass alloc]init];
   p = [sampleClass getRandom];
   for ( i = 0; i < 10; i++ ) {
      NSLog( @"*(p + %d) : %d\n", i, *(p + i));
   }

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit un résultat comme suit -

2013-09-14 03:22:46.042 demo[5174] r[0] = 1484144440
2013-09-14 03:22:46.043 demo[5174] r[1] = 1477977650
2013-09-14 03:22:46.043 demo[5174] r[2] = 582339137
2013-09-14 03:22:46.043 demo[5174] r[3] = 1949162477
2013-09-14 03:22:46.043 demo[5174] r[4] = 182130657
2013-09-14 03:22:46.043 demo[5174] r[5] = 1969764839
2013-09-14 03:22:46.043 demo[5174] r[6] = 105257148
2013-09-14 03:22:46.043 demo[5174] r[7] = 2047958726
2013-09-14 03:22:46.043 demo[5174] r[8] = 1728142015
2013-09-14 03:22:46.043 demo[5174] r[9] = 1802605257
2013-09-14 03:22:46.043 demo[5174] *(p + 0) : 1484144440
2013-09-14 03:22:46.043 demo[5174] *(p + 1) : 1477977650
2013-09-14 03:22:46.043 demo[5174] *(p + 2) : 582339137
2013-09-14 03:22:46.043 demo[5174] *(p + 3) : 1949162477
2013-09-14 03:22:46.043 demo[5174] *(p + 4) : 182130657
2013-09-14 03:22:46.043 demo[5174] *(p + 5) : 1969764839
2013-09-14 03:22:46.043 demo[5174] *(p + 6) : 105257148
2013-09-14 03:22:46.043 demo[5174] *(p + 7) : 2047958726
2013-09-14 03:22:46.043 demo[5174] *(p + 8) : 1728142015
2013-09-14 03:22:46.043 demo[5174] *(p + 9) : 1802605257