2011-08-18 17 views
7

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

उत्तर

4

यदि आप सामान्य UIViewController कोड लिख रहे हैं, तो आपको आईओएस में थ्रेड-सुरक्षा के बारे में चिंता करने की आवश्यकता नहीं है। आईओएस में, यूआई के बारे में कोई भी संदेश मुख्य धागे पर चलाना चाहिए।

यदि आप स्वयं द्वारा पृष्ठभूमि में कुछ संदेश नहीं करते हैं, तो आमतौर पर, आपको थ्रेड के बारे में चिंता करने की ज़रूरत नहीं है, ज्यादातर स्थितियों में, यह हमेशा मुख्य धागे पर होगा।

पीएस गेम किट जैसे कुछ फ्रेमवर्क कुछ बार पृष्ठभूमि में संदेश करेंगे, लेकिन यह यूआई के बारे में नहीं है और ऐप्पल से दस्तावेज़ आपको यह सुनिश्चित करने के लिए चेतावनी देगा कि संदेश मुख्य धागे पर चल रहा है या नहीं।

+0

कुछ ड्राइंग कोड बहु-थ्रेडेड हैं, जैसे मल्टी-कोर CPU पर चलते समय CATiledLayer। –

9

concurrency programming guide अच्छा है। ध्यान में रखने के लिए यहां कुछ सुपर महत्वपूर्ण चीजें दी गई हैं।

- आपको केवल मुख्य धागे से यूआई अपडेट करना चाहिए। यह आपको सूक्ष्म तरीकों से प्राप्त कर सकता है ...

- एनएसएनोटिफिकेशन उन धागे में प्राप्त किए जाएंगे जिनसे उन्हें निकाल दिया जाता है। इसलिए यदि आप एक थ्रेड लॉन्च करते हैं और यूआई एक्शन ट्रिगर करने के लिए एनएसएनोटिफिकेशन की सदस्यता लेते हैं, तो आपको यह जांचना चाहिए कि जब आप इसे प्राप्त करते हैं तो आप किस धागे पर हैं। यदि यह मुख्य धागे पर नहीं है तो NSObject के प्रदर्शन का चयन करें चयनकर्ताऑनमेन थ्रेड: withObject: waitUntilDone: इसे मुख्य थ्रेड पर प्राप्त करने के लिए।

- यदि आप गैर-यूई संदर्भ में कुछ ड्राइंग कर रहे हैं, तो मेरा मानना ​​है कि कोर ग्राफिक्स अब थ्रेड सुरक्षित है। (मुझे विश्वास है कि CATiledLayer इस वजह से कुछ चालाक चीजें करता है)

- आम तौर पर नियंत्रकों को देखने के लिए, आपको केवल एक ही घटना लूप के बारे में सोचना चाहिए जो मुख्य धागे पर है। किसी अन्य धागे पर अपना खुद का इवेंट लूप बनाने से पहले दो बार सोचें।

+0

बस पुष्टि करने के लिए, कोर ग्राफिक्स थ्रेड सुरक्षित है, और CATiledLayer यह सभी पृष्ठभूमि थ्रेड पर चित्रकारी करता है (यदि आपके पास एक कोर कोर है तो केवल एक पृष्ठभूमि थ्रेड)। –

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

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