2015-03-14 4 views
0

Я пытаюсь создать метод с аргументом в объекте-с, аргумент составляет несколько секунд до начала фактического метода.Создание метода в объекте-c с аргументом задержки

Я стараюсь избегать использования [self performSelector:(SEL) withObject:(id) afterDelay:(NSTimeInterval)];, потому что задержка в моем методе фактически сохранит мне много кодировки, поскольку я планирую добавить другие аргументы в этот метод.

Пример метода:

-(void) startMethodAfterArgumentDelay: (NSTimeInterval *)delay{ 
    NSLog(@"perform action after argument delay"); 
} 

и как назвать:

[self startMethodAfterArgumentDelay:3.0f]; 

Любая помощь будет принята с благодарностью!

ответ

2

Если вы не хотите использовать какие-либо 3-библиотеки, как другой ответ предложенного, это достаточно легко реализовать себя с помощью НОД-х dispatch_after() , Просто обратите внимание, что этот метод является асинхронным, поэтому ваш метод будет немедленно возвращаться, даже если содержимое блока задерживается.

- (void)startMethodAfterArgumentDelay:(NSTimeInterval)delay 
{ 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     NSLog(@"perform action after argument delay"); 
    }); 
} 
+1

Brilliant !! После того как я изменил NSTimeInterval на float, это работало безупречно! спасибо – PhilBlais

1

Вы можете использовать BlocksKit, а затем писать подобный код:

[self bk_performBlock:^(id obj) { 
    //code 
} afterDelay:delay]; 
1

Просто кормить delay в dispatch_after.

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) { 
    // do whatever 
}); 
Смежные вопросы