5

मान लें कि मेरे पास नियंत्रक ए है और नियंत्रक बीआईओएस: यदि मैं पृष्ठभूमि नौकरी निष्पादित करता हूं और फिर दृश्य नियंत्रक छोड़ देता हूं तो क्या होता है?

वीसी ए में, मैं वीसी बी को दबाता हूं, फिर वीसी बी में, मैं NSOperation का उपयोग करके कुछ पृष्ठभूमि कार्यों को निष्पादित करता हूं। पृष्ठभूमि कार्यों में, मैं वीसी बी के चर को संशोधित करता हूं।

क्या होता है यदि पृष्ठभूमि कार्य समाप्त नहीं होते हैं और मैंने वीसी बी छोड़ दिया है? क्या ऑपरेशन रद्द कर दिए जाएंगे या फिर भी वे निष्पादित होंगे? डिबगिंग करते समय ऐसा लगता है कि वे अभी भी निष्पादित कर रहे हैं। उस स्थिति में, वे पहले से ही जारी किए गए चर तक पहुंच नहीं पाएंगे (क्योंकि मैंने वीसी बी छोड़ दिया था)।

मैं इससे थोड़ा उलझन में हूं, कोई मुझे साफ़ कर सकता है? :)

धन्यवाद,

+0

इस तरह इसका बार है कि यह एक अप कोड करने के लिए लगभग आसान है प्रश्न पूछना उससे तेज परीक्षण है –

उत्तर

4

आप सही हैं, आपरेशन जादुई गायब नहीं होता है सिर्फ इसलिए कि उद्देश्य यह है कि यह पैदा किया था।

आप ओएस को अपवाद फेंकने का कारण बनेंगे क्योंकि यह अब डिलीओटेड दृश्य नियंत्रक ऑब्जेक्ट तक पहुंचने का प्रयास करता है। पृष्ठभूमि थ्रेडेड ऑपरेशंस करने का यह खतरा है।

आपको इस मामले में योजना बनाने की आवश्यकता है, इस मामले में, वीसी बी को हटाए जाने पर अपना ऑपरेशन रद्द करने में सक्षम हो। इसका मतलब एनएसओपरेशन को उप-वर्गीकरण करना है, मुख्य() को कार्यान्वित करना और जांचना रद्द करना है।

NSOperation, NSOperationQueues, और Concurrency प्रोग्रामिंग के संबंध में ऐप्पल के दस्तावेज़ देखें।

1

डॉक्स से:

एक बार जब आप एक कतार के लिए एक ऑपरेशन जोड़ने के लिए, आपरेशन अपने हाथ से बाहर है। कतार उस कार्य के शेड्यूलिंग को संभालने और संभालने में कामयाब होती है।

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

यदि आप सहमति लागू करना चाहते हैं तो आप ग्रांड सेंट्रल डिस्पैच और ब्लॉक का उपयोग करना चाहेंगे। ब्लॉक के अंदर संदर्भित किसी भी चर के रूप में ब्लॉक को समाहित और बनाए रखने के रूप में यह बेहतर काम करेगा, सेट अप करने और निष्पादित करने और क्लीनर कोड बनाने के लिए बहुत आसान है।

4

पृष्ठभूमि गतिविधियों के उद्देश्य बनाम वीसी-बी के उद्देश्य पर विचार करना अच्छा होगा। यदि उपयोगकर्ता वीसी-बी पर उपयोगकर्ता को क्या देखता है, तो समर्थन करने के लिए पृष्ठभूमि गतिविधियां होती हैं, और जब उपयोगकर्ता वीसी-बी से दूर चला जाता है तो पृष्ठभूमि गतिविधियां अब प्रासंगिक नहीं होती हैं, फिर वीसी-बी को छोड़कर पृष्ठभूमि गतिविधियों को समाप्त करना चाहिए। दूसरी ओर यदि पृष्ठभूमि गतिविधियों का उद्देश्य 'वीसी-बी' से बड़ा है, तो उपयोगकर्ता उन्हें जारी रखने की अपेक्षा करेगा; इस मामले में, गतिविधियों को प्रबंधित करने के लिए शायद कुछ 'अपेक्षाकृत स्थायी/दीर्घकालिक' वस्तु (एक 'पृष्ठभूमि प्रबंधक') के लिए उपयुक्त है। बाद के मामले में, वीसी पृष्ठभूमि पृष्ठभूमि के साथ उचित रूप से बातचीत करेगा।

तो (के रूप में यह होना चाहिए) यह है कि आप क्या (और अधिक महत्वपूर्ण बात, क्या उपयोगकर्ता करता है) चाहते हैं/उम्मीद करने के नीचे आता है ...