Les méthodes avec une liste variable d'arguments
Philippe49
Membre
Un exemple suite à la lecture de l'article de Matt Gallagher. Toutes les ressources sont dans la bibliothèque C <stdarg.h>, mis à part la macro NS_REQUIRES_NIL_TERMINATION. On peut lire la page man associée (Help > Open Man page)
Le code qui suit crée une chaà®ne de caractères en concaténant les objets passés en arguments. Si ce ne sont pas des chaà®nes de caractères, on prend leur description.
Le code qui suit crée une chaà®ne de caractères en concaténant les objets passés en arguments. Si ce ne sont pas des chaà®nes de caractères, on prend leur description.
#import <Foundation/Foundation.h><br /><br />@interface NSString (Concatenation) <br />+ (NSString*) stringByConcatenatingStrings:(NSString *) fisrtString, ... NS_REQUIRES_NIL_TERMINATION ;<br />@end<br /><br />@implementation NSString (Concatenation) <br />+ (NSString*) stringByConcatenatingStrings:(NSString *) firstString, ... {<br /> NSMutableString * result=[NSMutableString string];<br /> va_list args;<br /> va_start(args,firstString);<br /> NSString * arg=firstString;<br /> do {<br /> if([arg isKindOfClass:[NSString class]]) {<br /> [result appendString:arg];<br /> } else {<br /> [result appendString:[arg description]];<br /> }<br /> arg=va_arg(args,NSString *);<br /> } while(arg!=nil);<br /> va_end(args);<br /> return [[result copy] autorelease];<br />}<br />@end<br /><br />int main (int argc, const char * argv[]) {<br /> NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];<br /> <br /> NSString * str=[NSString stringWithFormat:@"World %d",2009];<br /> NSDate * date=[NSDate date];<br /> NSString * concat=[NSString stringByConcatenatingStrings:@"Hello ",date,str,nil];<br /> NSLog(concat);<br /> <br /> [pool drain];<br /> return 0;<br />}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
The va_end() macro handles a normal return from the function whose variable argument list was initialized by va_start().