Bir olayın 30 saniye sonra veya her 30 saniyede bir CocoaTouch ObjectiveC'de yükseltilmesi için bir çözüm olup olmadığını merak ediyordum.Amaç C javascripts setTimeout'a eşdeğer midir?
24
A
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.
3
+[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:]
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:
Bu, herhangi bir noktada 'dispatch_after' kaldıysa, biliyor musunuz? – Jacksonkr
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. –