2009-09-16 16 views

उत्तर

31

कई विकल्प हैं।

तेज उपयोग करने के लिए NSObject में है:

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay 

(वहाँ मामूली बदलाव के साथ कुछ अन्य लोगों के हैं।)

आपको अधिक नियंत्रण या फिर हर तीस इस संदेश को भेजने कहने में सक्षम होना चाहते हैं सेकंड आपको शायद NSTimer की आवश्यकता है।

+0

क्या आप जानते हैं कि यह किसी भी समय 'dispatch_after' का लाभ उठाता है? – Jacksonkr

+1

मेरा अनुमान शायद नहीं है (जीसीडी सी-स्तर है और चयनकर्ताओं के बारे में "पता नहीं" है; यह एपीआई भी जीसीडी की भविष्यवाणी करता है) लेकिन यह संभव है कि यह इसे हुड के तहत उपयोग करे। –

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

Documentation

तुम भी NSTimer वर्ग पर एक नजर डालें अन्य NSTimer तरीकों

11

को देखने के लिए चाहते हो सकता है:

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

कहीं और आप वास्तविक विधि है घटना को संभालती है:

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

प्रदर्शन चयनकर्ता: परिवार की इसकी सीमाएं हैं। यहाँ सबसे करीब setTimeout बराबर है:

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 
}); 

संपादित करें: परियोजनाओं कि वाक्यात्मक चीनी और रद्द करने के लिए निष्पादन (clearTimeout) की क्षमता प्रदान की एक जोड़े:

+0

देरी समय समाप्त होने से पहले कुछ देर होने पर और क्या यह शुरू हो जाने पर आप देरी/टाइमर को रीसेट कर सकते हैं? – topwik

+1

@tote संपादित करें – Blago

+1

यह बहुत उपयोगी था, धन्यवाद! – ebi

संबंधित मुद्दे