2011-12-16 19 views
6

मैंने ensureInMainThread नामक एक छोटी परिभाषा लिखी है (और मैं इसे थोड़ा सा उपयोग करता हूं)। हालांकि, मुझे यकीन नहीं है कि कौन सा उपयोगकर्ता इंटरफ़ेस विधियां को मुख्य थ्रेड पर कहा जा रहा है। setNeedsDisplay और setNeedsLayout के बारे में क्या? आईओएस 5.x में मुख्य धागे पर बुलाए जाने वाले तरीकों के लिए अंगूठे का नियम क्या है?मुख्य थ्रेड पर क्या होना चाहिए?

इन सवालों से संबंधित हैं (कुछ कम गुणवत्ता सवाल और जवाब, और कुछ बहुत मामले विशिष्ट), लेकिन मैं एक व्यापक, एकल अच्छा जवाब चाहते हैं:

उत्तर

9

आईओएस 4.0, some user interface updates can be performed on a background thread के रूप में:

  • UIKit में एक ग्राफिक्स संदर्भ के लिए आकर्षित अब धागा सुरक्षित है। विशेष रूप से:

    • पहुँच सकते हैं और हेरफेर करने के लिए ग्राफिक्स संदर्भ अब सही तरीके से अलग धागे पर रहने वाले संदर्भों संभाल कर सकते हैं इस्तेमाल किया दिनचर्या।

    • स्ट्रिंग और छवि ड्राइंग अब थ्रेड-सुरक्षित है।

    • एकाधिक धागे में रंग और फ़ॉन्ट ऑब्जेक्ट्स का उपयोग करना अब सुरक्षित है।

डेविड डंकन ने अपनी टिप्पणी के here में यह पुष्टि करता है।

इसके अलावा, UIKit के बारे में बहुत कुछ और थ्रेडसेफ नहीं माना जाता है, इसलिए आपको यह सुनिश्चित करना चाहिए कि आप उन मामलों में मुख्य धागे पर इसके साथ बातचीत कर रहे हैं।

एक तरफ, मैं आपके द्वारा लिंक किए गए मैक्रो पर my block-based implementation of a "always run on the main thread" function पसंद करता हूं, क्योंकि मुझे मुख्य थ्रेड पर चलाने के लिए कोड की स्पष्ट रैपिंग पसंद है।

+0

ब्रावो, हमेशा +1 के रूप में, ब्रैड लार्सन धन्यवाद। यही वह जवाब है जिसे मैं ढूंढ रहा था (इसे कल्पना करने में सक्षम होने के बिना)। क्या आप 'setNeedsDisplay' और' setNeedsLayout' पर टिप्पणी कर सकते हैं, और क्या आप किसी अन्य थ्रेड से सुरक्षित रूप से 'UILabel' पर एक स्ट्रिंग समायोजित कर सकते हैं? –

+1

@Yar - मेरा मानना ​​है कि '-setNeedsDisplay' सुरक्षित है, संदर्भ में ड्राइंग के आसपास सुरक्षा के कारण, लेकिन मुझे' -setNeedsLayout' के बारे में निश्चित नहीं है। मेरा मानना ​​है कि उत्तरार्द्ध सुरक्षित नहीं हो सकता है, क्योंकि यह ड्राइंग से निपट नहीं रहा है, बल्कि इसके बजाय विचारों और परतों की स्थिति है। मुझे लगता है कि यूलाबेल का टेक्स्ट ड्राइंग सुरक्षित होना चाहिए, लेकिन मैंने इसे स्वयं परीक्षण नहीं किया है। –

3

अंगूठे का नियम: कुछ भी जो इंटरफ़ेस mu अद्यतन करता है सेंट मुख्य धागे पर हो।

+3

जैसा कि मैंने अपने उत्तर में बताया है, अब UIKit के कुछ पहलू हैं जो आईओएस 4.0 के रूप में थ्रेडसेफ हैं। –

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