Вы можете использовать метод NSTimer
:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds
invocation:(NSInvocation *)invocation
repeats:(BOOL)repeats;
Вместо этого, поскольку объект NSInvocation
позволит вам передавать аргументы; NSInvocation
объект, как определяют документы :
сообщение Objective C, представленное статическим, то есть это действие, превращенное в объект.
При создании объекта NSTimer
с использованием селектора требуется формат метода:
- (void)timerFireMethod:(NSTimer*)theTimer
NSInvocation
позволяет вам установить цель, селектор и аргументы, которые вы передаете:
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];
Где MyObject
- это класс, для которого myMethod:setValue2:
объявлен и реализован - instanceMethodSignatureForSelector:
- это вспомогательная функция, объявленная в NSObject
, которая возвращает вам NSMethodSignature
объект для передачи в NSInvocation
.
Кроме того, отметим, что при setArgument:atIndex:
индексы для аргументов, передаваемых методу, установленному в качестве селектора, начинаются с индекса 2. Из документов:
Индексы 0 и 1 указывают скрытые аргументы self и _cmd соответственно; Вы должны установить эти значения непосредственно с помощью методов setTarget: и setSelector :. Используйте индексы 2 и выше для аргументов, обычно передаваемых в сообщении.