मेरे कोड को मुख्य थ्रेड पर चलने वाले एक निश्चित ऑपरेशन की गारंटी करने की आवश्यकता है, लेकिन कॉल पृष्ठभूमि थ्रेड से आ सकती है। लेकिन 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]])
कोई प्रभाव नहीं है, वे अभी भी एक ही मूल्य की तुलना कभी नहीं।
मुझे एक समाधान मिला जो काम करता प्रतीत होता है, लेकिन मैं देखना चाहता हूं कि अन्य लोग पहले क्या सुझाव देते हैं।
यह मेरे पास जो कुछ था उससे पढ़ने के लिए बहुत साफ है: यदि ([[NSRunLoop currentRunLoop] getCFRunLoop]! = [[NSRunLoop mainRunLoop] getCFRunLoop]) –