2010-11-19 12 views
42

मेरे कोड को मुख्य थ्रेड पर चलने वाले एक निश्चित ऑपरेशन की गारंटी करने की आवश्यकता है, लेकिन कॉल पृष्ठभूमि थ्रेड से आ सकती है। लेकिन iOS 3.1.3 पर और पहले नहींउद्देश्य-सी में मुख्य धागे पर कोड चल रहा है या नहीं, यह जानने का उचित तरीका क्या है? (आईओएस)

- (void)selectorToRunInMainThread:(id)arguments 
{ 
    // push to main thread 
     if ([NSRunLoop currentRunLoop] != [NSRunLoop mainRunLoop]) 
     { 
      [self performSelectorOnMainThread:@selector(selectorToRunInMainThread:) withObject:arguments waitUntilDone:NO]; 
      return; 
     } 

    /* 
    ... function content ... 
    */ 
} 

यह आईओएस 4 और iOS 3.2 पर काम करता है:

मैं उपयोग कर रहा था निम्नलिखित पृष्ठभूमि में स्थितियों का पता लगाने के लिए। इन पुराने संस्करणों में, फ़ंक्शन को अंतहीन पाश में बुलाया जाएगा।

की तुलना में बदलना:

if (![[NSRunLoop currentRunLoop] isEqualTo:[NSRunLoop mainRunLoop]])

कोई प्रभाव नहीं है, वे अभी भी एक ही मूल्य की तुलना कभी नहीं।

मुझे एक समाधान मिला जो काम करता प्रतीत होता है, लेकिन मैं देखना चाहता हूं कि अन्य लोग पहले क्या सुझाव देते हैं।

उत्तर

89

[NSThread isMainThread] और यदि नहीं, तो मुख्य धागे (जो आपके पास ठीक है) में कई तंत्रों के माध्यम से प्रेषण करें।

+0

यह मेरे पास जो कुछ था उससे पढ़ने के लिए बहुत साफ है: यदि ([[NSRunLoop currentRunLoop] getCFRunLoop]! = [[NSRunLoop mainRunLoop] getCFRunLoop]) –

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

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