2011-09-03 14 views
10

मेरे आईओएस प्रोग्राम में, मैं एक फ़ंक्शन को 1 सेकंड के लिए रोकना चाहता हूं। ऐसा करने के लिए मुझे क्या कोड लिखना है?आईओएस प्रोग्रामिंग में समय को कैसे रोकें

+8

यह जानने के बिना कि आप एक सेकंड के लिए क्यों रोकना चाहते हैं, ठीक से इसका उत्तर देना मुश्किल है। जब तक आप सावधान न हों - आप केवल यूआई को एक सेकंड के लिए अवरुद्ध कर देंगे जो _very bad_ उपयोगकर्ता अनुभव है। – Abizern

उत्तर

24

आप इनमें से किसी एक का उपयोग कर सकते हैं: sleep(1); या wait(1);

या आप [NSThread sleepForTimeInterval:1.0]

उपयोग कर सकते हैं और वहाँ भी performSelector:withObject:afterDelay

+3

या, बाकी कार्यों को एक ब्लॉक में रखें और इसे 'dispatch_after' के साथ शेड्यूल करें;) – Abizern

+3

सोना लगभग निश्चित रूप से एक अच्छा विचार नहीं है। यदि ट्विंकल को पहले से ही 'नींद' का उपयोग करने का तरीका नहीं पता है, तो मुझे संदेह है कि ई पृष्ठभूमि धागे का उपयोग कर रहा है। इसका मतलब यूआई थ्रेड को रोकना है। –

+1

मैं पृष्ठभूमि थ्रेड को रोकने की कोशिश कर रहा हूं। – Twinkle

2

आईओएस के लिए नया है पूरा होने के ब्लॉक कर रहे हैं। यदि आपको व्यू कंट्रोलर पॉप अप करने के बाद कुछ क्रियाएं करने की आवश्यकता है, उदाहरण के लिए, अब आप ब्लॉक का उपयोग कर सकते हैं। मैंने हाल ही में एक संदेश रचना दृश्य नियंत्रक को खारिज करने के लिए इस विधि का उपयोग किया और फिर सफल होने पर वर्तमान दृश्य नियंत्रक पॉप करें।

पुराना तरीका:

[controller dismissModalViewControllerAnimated:YES]; 
// Use an NSThread or performSelector:withObject:afterDelay 

न्यू वे:

[controller dismissViewControllerAnimated:YES completion:^{ 
    if (result != MessageComposeResultCancelled){ 
    // If cancelled remain on current screen, else pop to parent view controller 
    [self.navigationController popViewControllerAnimated:YES]; 
    } 
}]; 
3

यह करने के लिए एक और तरीका है:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{//Place code here}); 

नींद() और इंतजार() कर रहे हैं कभी-कभी नीचे देखा जाता है लेकिन जब तक आप समझते हैं कि आपकी मुफ्त इच्छा पर इसका क्या उपयोग हो रहा है

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