выполнить метод после задержки, не используя NSThread или sleep () - есть ли другой вариант? - PullRequest
17 голосов
/ 12 июля 2011

Есть ли в iOS4 способ вызвать метод после задержки, используя что-то другое, кроме NSThread, или заблокировать пользовательский интерфейс с помощью sleep ()?

Ответы [ 6 ]

29 голосов
/ 12 июля 2011
    double delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        // code to be executed on main thread.If you want to run in another thread, create other queue
    });
9 голосов
/ 12 июля 2011
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

из NSObject сделает это за вас.

Кроме того, вы можете создать NSTimer и заставить его выполнить обратный вызов некоторой цели и селектору через заданный промежуток времени.

3 голосов
/ 12 июля 2011
[self performSelector:@selector(methodName) withObject:nil afterDelay:2.0];
3 голосов
/ 12 июля 2011

Вы можете использовать NSTimer . (например timerWithTimeInterval:target:selector:userInfo:repeats)

1 голос
/ 12 июля 2011
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self 
         selector:@selector(aMethod:) userInfo:nil repeats:NO];

- (void) aMethod:(NSTimer *) aTimer {
  //task to do after the delay.
}
0 голосов
/ 12 июля 2011

Вы можете легко сделать это с помощью:

[self performSelector:@selector(methodName) withObject:nil afterDelay:5];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...