2009-09-16 6 views

cevap

31

Çok sayıda seçenek vardır.

kullanmak en hızlı

NSObject içinde:
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay 

(birkaç başka küçük farklılıklar vardır.)

daha fazla kontrol veya her otuz bu mesajı göndermek söyleyebilmek istiyorsanız muhtemelen NSTimer'a ihtiyacınız var.

+0

Bu, herhangi bir noktada 'dispatch_after' kaldıysa, biliyor musunuz? – Jacksonkr

+1

Tahminim muhtemelen (GCD, C-seviyesidir ve seçiciler hakkında "bilmez", ayrıca bu API GCD'den önce gelir) ancak kaputun altında kullanılması mümkündür. –

3
+[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:] 

Documentation

Ayrıca NSTimer sınıfa bir göz atın diğer NSTimer yöntemlerle

11

bakmak isteyebilirsiniz: Başka

NSTimer *timer; 
... 
timer = [[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(thisMethodGetsFiredOnceEveryThirtySeconds:) userInfo:nil repeats:YES] retain]; 
[timer fire]; 

yerde gerçek yöntemine sahip olduğunu olayı işler:

- (void) thisMethodGetsFiredOnceEveryThirtySeconds:(id)sender { 
    NSLog(@"fired!"); 
} 
42

performSelector: ailesi kendi sınırlamaları vardır. İşte en yakın setTimeout eşdeğerdir:

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 0.5); 
dispatch_after(delay, dispatch_get_main_queue(), ^(void){ 
    // do work in the UI thread here 
}); 

DÜZENLEME: sözdizimsel şeker ve yürütme (clearTimeout) iptal edebilecek sağlayan projelerin bir çift:

+0

Gecikme süresinin sona ermesinden önce bir şey olursa gecikme/zamanlayıcıyı sıfırlayabilir ve yeniden başlatabilir misiniz? – topwik

+1

@tote Düzenle – Blago

+1

Bu çok yardımcı oldu, teşekkürler! – ebi