ब्लॉक का लक्ष्य इसे न्यूनतम वाक्यविन्यास वाले ब्लॉक का उपयोग करने के लिए जितना संभव हो सके स्वचालित और पारदर्शी बनाना था और उन्हें "बस काम करना" था।
गैर-ब्लॉक ब्लॉक वैरिएबल, डिफ़ॉल्ट के रूप में, ब्लॉक को "बंद करने" की धारणा के अनुरूप बहुत अधिक हैं। एक ब्लॉक ब्लॉक घोषणा के दौरान निष्पादन के समय ब्लॉक के भीतर संदर्भित सभी चरों की स्थिति को स्नैपशॉट करता है। इसमें स्मृति/राज्य की प्रतिलिपि बनाने और ब्लॉक में कब्जा कर लिया गया कोई भी उद्देश्य-सी ऑब्जेक्ट संदर्भ शामिल है।
__block
प्रभावी रूप से ब्लॉक के भीतर राज्य के encapsulation तोड़ता है। बहुत उपयोगी है, लेकिन प्रोग्रामर के हिस्से पर ऑब्जेक्ट संदर्भों के मैन्युअल प्रबंधन की आवश्यकता है।
आईई। गैर -__ ब्लॉक वैरिएबल "बस काम करते हैं" अधिकतर __block चर और, इस प्रकार, डिफ़ॉल्ट व्यवहार "बस काम करता है" के लिए गुरुत्वाकर्षण करना था।
प्रैक्टिस में, ब्लॉक के भीतर राज्य को कैप्चर करने की लागत आमतौर पर न्यूनतम होती है। ऐप प्रदर्शन पर मापनीय प्रभाव आम तौर पर दुर्लभ होता है और अक्सर अधिक गहन प्रकृति की वास्तुशिल्प समस्या को इंगित करता है।
हैं द्वारा:
__block SelfClass * blockSelf = self;
आप ब्लाकों और एआरसी की क्रॉस-उत्पाद की बात कर रहे हैं? हाँ, यह थोड़ा दुर्भाग्यपूर्ण है। लेकिन संकलक भी एक बहुत ही वास्तविक मुद्दे के बारे में चेतावनी दे रहा है जिसके बारे में आपको अवगत होना चाहिए। हालांकि, एक क्लीनर वर्कअराउंड स्पष्ट रूप से बेहतर होगा।
काफी नहीं; दोनों मामलों में, ब्लॉक एक ढेर स्कॉप्ड ब्लॉक है और इस प्रकार, इस क्षेत्र के साथ नष्ट हो जाएगा। आपको ब्लॉक को प्रतिलिपि बनाने के लिए ब्लॉक की प्रतिलिपि बनाना है। साथ ही, यह '__block' का एक छोटा सा विवरण है; वहां कई अन्य ड्राइविंग कारक हैं। – bbum