2010-09-16 15 views
6

मैं ब्लॉक की अवधारणा को समझने की कोशिश कर रहा हूं। जो मैंने अभी तक पढ़ा है वह अवधारणात्मक रूप से जावास्क्रिप्ट में अज्ञात कार्यों के समान लगता है। क्या ये सही है?उद्देश्य-सी ब्लॉक जावास्क्रिप्ट में अज्ञात कार्यों के समान हैं?

उत्तर

4

हाँ, सबसे बड़े हिस्से के लिए। ब्लॉक प्रकार सी कार्यों का इलाज दयालु वस्तुओं की तरह है जो आसपास के दायरे से चर को पकड़ सकते हैं। बेनामी फ़ंक्शंस ब्लॉक के बराबर हैं, लेकिन निश्चित रूप से ब्लॉकों के पीछे की जटिल मशीनरी के कारण समान नहीं हैं।

उदाहरण के लिए, यदि आप फ़ंक्शन/विधि के बाद एक ब्लॉक का उपयोग करने की योजना बनाते हैं जो ब्लॉक को परिभाषित करता है तो अब सक्रिय नहीं है-यह मामला है यदि आप ब्लॉक को किसी संपत्ति के रूप में कहीं सेट करते हैं या जीसीडी (बहु -कोर ऑपरेशन क्यूइंग लाइब्रेरी), आपको इसे Block_copy() (या [aBlock copy]) से कॉपी करने की आवश्यकता है। मैं विवरण में नहीं जाऊंगा, लेकिन निश्चित रूप से ऐसा कुछ नहीं है जो आप जेएस (अज्ञात) कार्यों के साथ करते हैं। इसे इस तथ्य के साथ करना है कि अक्षर को स्टैक (और कोड में कहीं नहीं) पर आवंटित किया गया है और यदि आप इसे जारी रखना चाहते हैं तो आपको इसे ढेर में कॉपी करने की आवश्यकता है।

यह काफी जटिल हो सकता है (लेकिन इसके डिजाइन में सुंदर है), लेकिन अधिकांश उपयोग मामलों के लिए यह आसान है और आप इसे अज्ञात जेएस कार्यों की तरह व्यवहार कर सकते हैं। ;-)

3

हां। उद्देश्य-सी में ब्लॉक बंद हैं।

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