iphone - Are there concurrency problems when using -performSelector:withObject:afterDelay:? -


उदाहरण के लिए, मैं अक्सर इसका उपयोग करता हूं:

  [self performSelector: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बाद डिल: कुछ डेल];  

अब, मैं कह सकता हूँ कि मैं 10 वें नंबर पर सटीक विलंब पर प्रदर्शन करने के लिए कहता हूं, जैसे:

  [self performSelector: @selector (doSomethingAfterDelay :) WithObject: कुछ ऑब्जेक्ट के बाद डेल: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; [आत्म निष्पादनकर्ता: @selector (doSomethingAfterDelay :) withObject: कुछ ऑब्जेक्ट के बादडेला: 2.0]; - (शून्य) doSomethingAfterDelay: (आईडी) कुछ ऑब्जेक्ट {/ * एक सरणी का उपयोग, सामान पढ़ा, सामग्री लिखने, विभिन्न चीजें हैं जो multithreaded वातावरण में भुगतना होगा .... सभी कार्यों nonatomic हैं! * /}  

मैंने इस तरह से बातें करते समय बहुत अजीब व्यवहार देखा है। मेरी समझ के लिए, इस पद्धति ने वर्तमान धागा पर आग लगाने के लिए टाइमर का समय निर्धारित किया है, इसलिए इस मामले में मुख्य थ्रेड लेकिन चूंकि यह नया थ्रेड नहीं बना है, यह वास्तव में संगामिति समस्याओं में चलना संभव नहीं होना चाहिए, सही?

संक्षिप्त उत्तर हां - संगामी मुद्दों में चलना संभव नहीं होना चाहिए। निष्पादित करेंइलेक्टिव्वॉइडऑब्जेक्टअधिककाल मुख्य थ्रेड (और ब्लॉक यूआई) पर चलाता है। हालांकि, आपके उपरोक्त उदाहरण में, मैं यह नहीं मानना ​​चाहूंगा कि वे कौन सी व्यवस्था में भाग लेंगे - कई कॉल्स रन लूप के आसपास एक ही गोद के लिए निर्धारित हो सकते हैं।


Comments