Vous pouvez utiliser l' NSTimer
méthode:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds
invocation:(NSInvocation *)invocation
repeats:(BOOL)repeats;
Au lieu de cela, depuis un NSInvocation
objet vous permettra de passer des arguments; un NSInvocation
objet est, comme les docs définir:
Objective-C message rendu statique, qui est, il est une action transformé en un objet.
Alors que la création d'un NSTimer
objet à l'aide d'un sélecteur exige le format de la méthode:
- (void)timerFireMethod:(NSTimer*)theTimer
Un NSInvocation
vous permet de définir la cible, le sélecteur, et les arguments que vous passez dans:
SEL selector = @selector(myMethod:setValue2:);
NSMethodSignature *signature = [MyObject instanceMethodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setSelector:selector];
NSString *str1 = @"someString";
NSString *str2 = @"someOtherString";
//The invocation object must retain its arguments
[str1 retain];
[str2 retain];
//Set the arguments
[invocation setTarget:targetInstance];
[invocation setArgument:&str1 atIndex:2];
[invocation setArgument:&str2 atIndex:3];
[NSTimer scheduledTimerWithTimeInterval:0.1 invocation:invocation repeats:YES];
Où MyObject
est la classe qui myMethod:setValue2:
est déclaré et mis en œuvre sur – instanceMethodSignatureForSelector:
est une fonction de commodité déclaré sur NSObject
qui retourne un NSMethodSignature
objet pour vous, pour être transmis à l' NSInvocation
.
Aussi, à noter, en setArgument:atIndex:
, les indices pour les arguments passés à la méthode définie comme le sélecteur de commencer à l'index 2. À partir de la documentation:
Les Indices 0 et 1 indiquent le caché arguments de soi et _cmd, respectivement; vous devez régler ces valeurs directement avec le setTarget: et setSelector: méthodes. Utiliser les indices 2 et plus pour les arguments normalement transmis dans un message.