En ce moment, j'ai ceci:fonction VARIADIC en Objective C qui accepte les primitives
// .h
- (NSArray *)createNumberArrayWithInts:(NSInteger)firstArg, ...
NS_REQUIRES_NIL_TERMINATION;
// .m
- (NSArray *)newNumberArrayWithInts:(NSInteger)firstArg, ... {
NSMutableArray *lCreatedArray = [NSMutableArray alloc];
va_list args;
va_start(args, firstArg);
for (NSInteger arg = firstArg; arg != nil; arg = va_arg(args, NSInteger)) {
NSNumber *lTempNumberObject = [[NSNumber alloc] initWithInteger:arg];
[lCreatedArray addObject:lTempNumberObject];
[lTempNumberObject release];
}
va_end(args);
NSArray *lImmutableArray = [[NSArray alloc] initWithArray:lCreatedArray];
[lCreatedArray release];
return lImmutableArray;
}
mais la comparaison à zéro est incorrect parce que ints ne sont pas des objets. Utiliser NSNumbers serait vaincre le but pour moi car j'essaie de ne pas allouer les objets en dehors de cette méthode.
quoi faire?
Je pense que, si le type d'entier est 'NSInteger', la meilleure valeur sentinelle est probablement' NSNotFound' qui est devrait être la plus grande valeur possible exprimable en tant que 'NSInteger'. – JeremyP
@JeremyP: En fait, puisqu'il utilise un NSInteger, il devrait probablement utiliser NSIntegerMax. NSNotFound est en fait défini comme NSIntegerMax, mais IMO, en utilisant NSIntegerMax est plus à propos. Honnêtement, cependant, je pense qu'en ajoutant le nombre d'entiers, le premier argument requis est la meilleure solution. –
Je suis allée et venir sur ce qui est le mieux dans les 2 dernières heures. J'utilise la méthode NSNotFound en ce moment, mais pourquoi préféreriez-vous la longueur comme premier argument requis? (J'ai seulement choisi NSNotFound pour la lisibilité) – griotspeak