2016-08-17 7 views
6

स्विफ्ट का स्ट्रिंग प्रकार एक मान प्रकार है। यदि आप एक नया स्ट्रिंग मान बनाते हैं, तो स्ट्रिंग मान की प्रतिलिपि बनाई जाती है जब इसे किसी फ़ंक्शन या विधि में पास किया जाता है, या जब इसे निरंतर या चर के लिए आवंटित किया जाता है।किसी फ़ंक्शन पर पास होने पर मूल्य टाइप किए गए चर को कॉपी किया जाता है, यह प्रतिलिपि क्या है?

यह स्थिर या परिवर्तनीय को आवंटित करते समय कॉपी किया गया है, यह मेरे लिए समझ में आता है। लेकिन जब एक मान टाइप किए गए चर को किसी फ़ंक्शन में पास किया जाता है तो यह भी कॉपी हो जाता है, यह मुझे भ्रमित करता है।

प्रश्न

कॉपी हो जाता है कैसे जब एक समारोह के लिए चर आपके द्वारा लिखा गया एक मूल्य गुजर? इस प्रतिलिपि किस तरह की "अंतरिक्ष" रखती है? क्या यह दृश्य के पीछे अदृश्य रूप से निर्मित कुछ प्रकार के अस्थायी चर है और फ़ंक्शन की प्रक्रिया के बाद यह नष्ट हो जाता है?

धन्यवाद स्विफ्ट में

उत्तर

2

जब एक समारोह के लिए मान प्रकार गुजर, एक स्थानीय चर जिसका गुंजाइश है कि समारोह है करने के लिए यह बताए के रूप में विचार है, तो प्रति व्यवहार सिर्फ एक नया स्थानीय चर बताए के अनुरूप है।

के बारे में जहां यह कॉपी किया जाता है, हम मानते हैं चाहिए कि प्रति व्यवहार वास्तव में और अधिक जटिल की तुलना में यह लग रहा है। के रूप में वे Building Better Apps with Value Types in Swift (WWDC 2015, Session 414) में बताते हैं, "प्रतियां सस्ते हैं":

हुए निम्न-स्तर की प्रतिलिपि बनाना, बुनियादी प्रकार निरंतर समय

  • Int, Double, आदि

प्रतिलिपि बनाई जा रही एक है मूल्य प्रकारों की संरचना, enum, या tuple निरंतर समय

  • CGPoint, आदि

एक्सटेंसिबल डेटा संरचनाओं कॉपी-ऑन-लिखने का उपयोग

  • प्रतिलिपि बनाई जा रही संदर्भ गिनती आपरेशन

  • String, Array, Set, Dictionary, आदि की एक निश्चित संख्या शामिल है ।

कि अंतिम बिंदु के बारे में

, पर्दे के पीछे स्विफ्ट हाथ कि एक्सटेंसिबल मूल्य प्रकार हर बार उन्हें संदर्भित कर रहे हैं कॉपी करने से बचा जाता है में से कुछ सफ़ाई करता है, बल्कि सिर्फ मूल संदर्भ के लिए अंक लेकिन कितने का ट्रैक रखता है संदर्भ हैं और वास्तव में केवल प्रतियां (ए) लिखते हैं; जहां (बी) एक से अधिक संदर्भ हैं। that video में इस व्यवहार पर अधिक विस्तार से चर्चा की गई है।

+0

आपकी मदद और वीडियो लिंक के लिए बहुत बहुत धन्यवाद। – SLN

3

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

स्विफ्ट वास्तविक डेटा क्लोन करता है जब यह पता चलता है कि इसे लिखने की आवश्यकता है। उदाहरण के लिए यदि let से var पर कोई सरणी पारित की जाती है तो कोई बड़ी प्रतियां नहीं बनाई जाती हैं। यदि आप एक नया तत्व जोड़कर नई सरणी को अद्यतन करते हैं, तो उस बिंदु पर सरणी सामग्री का एक क्लोन बनाया गया है, और नया तत्व वहां जोड़ा गया है।

+0

आपकी मदद और स्पष्टीकरण के लिए धन्यवाद – SLN

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

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