दिलचस्प पोस्ट
शेल एक लाइनर को एक फ़ाइल में शामिल करने के लिए WCF 3.0 में क्लाइंट आईपी एड्रेस प्राप्त करना मैं जावा में इंटरफ़ेस प्रोग्राम के सभी कार्यान्वयन की एक सूची कैसे प्राप्त करूं? फ़ंक्शन / विधि के लिए मुझे 'इनलाइन' कीवर्ड लिखना चाहिए? आईईएस (ओबजे-सी) और एंड्रॉइड (जावा) में एईएस अलग-अलग नतीजे संकेतक के सरणी / सर के लिए सी पॉन्टर जावास्क्रिप्ट स्विच बनाम अगर … और अगर … और "स्ट्रिंग का समाधान नहीं किया जा सका" त्रुटि Eclipse के लिए सी ++ (ग्रहण मानक लाइब्रेरी को हल नहीं कर सकता है) LINQ से एसक्यूएल और क्रमबद्ध परिणामों पर चलने वाला कुल JavaMail API को iMail – java.net.SocketException: अनुमति अस्वीकृत: कनेक्ट करें एक div की अंतिम पंक्ति को सही ठहराना? मैं सी # में विधि कॉल कैसे रोकूं? मैं jQuery के साथ पाठ नोड्स कैसे चुनूं? त्रुटि: (1, 0) आईडी के साथ प्लगइन 'com.android.application' नहीं मिला आप एक अजगर time.struct_time ऑब्जेक्ट को एक datetime ऑब्जेक्ट में कैसे परिवर्तित करते हैं?

@import vs #import – आईओएस 7

मैं कुछ नई आईओएस 7 सुविधाओं के साथ खेल रहा हूं और कुछ छवि प्रभावों के साथ काम कर रहा हूं जैसा कि WWDC वीडियो "IOS पर लागू करने वाले यूजिंग यूआई" में चर्चा की गई है। सत्र के लिए स्रोत कोड के भीतर एक धुंधला प्रभाव पैदा करने के लिए, UIImage एक ऐसी श्रेणी के माध्यम से विस्तारित किया गया था जो UIKit को आयात करता है:

 @import UIKit; 

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

वेब के समाधान से एकत्रित समाधान "@import vs #import – आईओएस 7"

यह मॉड्यूल या "अर्थपूर्ण आयात" नामक एक नई सुविधा है सत्र 205 और 404 के लिए WWDC 2013 के वीडियो में अधिक जानकारी है यह प्री-कंपाइल किए गए हेडर के बेहतर कार्यान्वयन की तरह है आप iOS 7 और Mavericks में किसी भी सिस्टम फ़्रेमवर्क के साथ मॉड्यूल का उपयोग कर सकते हैं मॉड्यूल एक फ्रेमवर्क के साथ पैकेजिंग के निष्पादन योग्य हैं और यह हेडर है और #import तुलना में अधिक सुरक्षित और कुशल होने के रूप में माना जाता है।

@import का उपयोग करने के बड़े लाभों में से एक यह है कि आपको प्रोजेक्ट सेटिंग्स में रूपरेखा जोड़ने की आवश्यकता नहीं है, यह स्वचालित रूप से किया जाता है इसका मतलब यह है कि आप उस कदम को छोड़ सकते हैं जहां आप प्लस बटन पर क्लिक करते हैं और ढांचे के लिए खोज करते हैं (गोल्डन टूलबॉक्स), फिर उसे "फ़्रेमवर्क" समूह में ले जाएं यह क्रिप्टिक "लिंकर त्रुटि" संदेशों से कई डेवलपर्स को बचाएगा।

वास्तव में @import कीवर्ड का उपयोग करने की आवश्यकता नहीं है यदि आप मॉड्यूल का उपयोग करने के लिए ऑप्ट-इन करते हैं, तो सभी #import और #include निर्देशों को @import स्वचालित रूप से उपयोग करने के लिए मैप किया जाता है। इसका मतलब है कि आपको अपना स्रोत कोड (या लाइब्रेरी स्रोत कोड जिसे आप कहीं और से डाउनलोड करते हैं) को बदलना नहीं है। माना जाता है कि मॉड्यूल का उपयोग भी निर्माण प्रदर्शन को सुधारता है, खासकर यदि आप पीसीएच की अच्छी तरह से उपयोग नहीं कर रहे हैं या यदि आपके प्रोजेक्ट में कई छोटे स्रोत फ़ाइलें हैं

अधिकांश ऐप्पल फ़्रेमवर्क (UIKit, MapKit, GameKit, आदि) के लिए मॉड्यूल पूर्व-निर्मित होते हैं। आप उन्हें अपने द्वारा बनाई गई ढांचे के साथ उपयोग कर सकते हैं: यदि आप Xcode में एक स्विफ्ट फ़्रेमवर्क बनाते हैं, तो आप स्वचालित रूप से निर्मित होते हैं, और आप किसी भी एप्पल या तृतीय-पक्ष लाइब्रेरी के लिए मैन्युअल रूप से ".modulemap" फ़ाइल बना सकते हैं।

उपलब्ध चौखटे की सूची देखने के लिए आप कोड-पूरा उपयोग कर सकते हैं:

यहां छवि विवरण दर्ज करें

मॉड्यूल Xcode 5 में नई परियोजनाओं में डिफ़ॉल्ट रूप से सक्षम हैं उन्हें एक पुराने प्रोजेक्ट में सक्षम करने के लिए, अपनी प्रोजेक्ट बिल्ड सेटिंग में जाएं, "मॉड्यूल" खोजें और "सक्षम करें मॉड्यूल" को "हाँ" पर सेट करें "लिंक फ़्रेमवर्क" भी "हाँ" होना चाहिए:

आपको Xcode 5 और iOS 7 या Mavericks SDK का प्रयोग करना है, लेकिन आप अभी भी पुराने ओएस के लिए जारी कर सकते हैं (IOS 4.3 या जो भी कहें)। मॉड्यूल आपके कोड का निर्माण या स्रोत कोड में से कोई भी नहीं बदलते हैं।


WWDC स्लाइड्स से:

  • आयात एक ढांचे के पूर्ण अर्थपूर्ण विवरण
  • हेडर को पार्स करने की आवश्यकता नहीं है
  • ढांचे के इंटरफेस को आयात करने का बेहतर तरीका
  • लोड द्विआधारी प्रतिनिधित्व
  • Precompiled हेडर से अधिक लचीला
  • स्थानीय मैक्रो परिभाषाओं के प्रभावों को प्रतिरक्षा (जैसे #define readonly 0x01 )
  • डिफ़ॉल्ट रूप से नई परियोजनाओं के लिए सक्षम

मॉड्यूल का स्पष्ट उपयोग करने के लिए:

@import Cocoa; साथ #import <Cocoa/Cocoa.h> को @import Cocoa;

आप इस नोटेशन के साथ केवल एक हेडर आयात कर सकते हैं:

 @import iAd.ADBannerView; 

Xcode में आपके लिए submodules स्वत: पूर्ण।

आपको नॉलेज सीको (आईएसबीएन: 978-1-491- 9 0139-7) के साथ किताब सीखना कोको में अच्छा जवाब मिलता है

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

 #import "someFile.h" 

या चौखटे के मामले में:

 #import <SomeLibrary/SomeFile.h> 

चूंकि उद्देश्य-सी सी प्रोग्रामिंग भाषा का एक सुपरसेट है, # इमपोरेट स्टेट-आईमेंट सी के #include स्टेटमेंट पर एक मामूली संशोधन है #include बयान बहुत सरल है; यह संकलन के दौरान शामिल किए गए फ़ाइल में आपके कोड में पाई जाने वाली चीज़ों की प्रतिलिपि बनाता है। यह कभी-कभी महत्वपूर्ण समस्याएं पैदा कर सकता है। उदाहरण के लिए, कल्पना करें कि आपके पास दो हेडर फ़ाइलें हैं: SomeFileA.h और SomeFileB.h ; SomeFileA.h में SomeFileA.h शामिल है, और SomeFileB.h में SomeFileA.h शामिल है। यह एक पाश बनाता है, और कॉम्मेमिलेटर को भ्रमित कर सकता है। इस से निपटने के लिए, सी प्रोग्रामर्स को इस प्रकार के घटना के खिलाफ होने वाली घटनाओं से गार्ड लिखना होगा।

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

मॉड्यूल इस के आसपास पाने के लिए एक प्रयास कर रहे हैं। वे अब स्रोत कोड में एक कॉपी-पेस्ट नहीं कर रहे हैं, लेकिन शामिल फ़ाइलों का एक क्रमबद्ध प्रतिनिधित्व जो केवल आपके स्रोत कोड में आयात किए जा सकते हैं, केवल कब और कहां की आवश्यकता होती है मॉड्यूल का उपयोग करके, कोड आम तौर पर तेजी से संकलित होगा, और या तो #include या #import का उपयोग करने से सुरक्षित होगा

ढांचे को आयात करने के पिछले उदाहरण पर लौटना:

 #import <SomeLibrary/SomeFile.h> 

इस लाइब्रेरी को एक मॉड्यूल के रूप में आयात करने के लिए, कोड को इसमें बदल दिया जाएगा:

 @import SomeLibrary; 

इसमें Xcode का जोड़ा बोनस है जो SomeLibrary फ़्रेमवर्क को स्वचालित रूप से प्रोजेक्ट में जोड़ता है। मॉड्यूल आपको केवल उन घटकों को शामिल करने की अनुमति देते हैं जो वास्तव में आपके प्रोजेक्ट में आवश्यक हैं। उदाहरण के लिए, यदि आप AwesomeLibrary फ्रेमवर्क में AwesomeObject घटक का उपयोग करना चाहते हैं, तो सामान्य रूप से आपको एक टुकड़ा का उपयोग करने के लिए बस कुछ भी आयात करना होगा हालांकि, मॉड्यूल का उपयोग करके, आप केवल उस विशेष वस्तु को आयात कर सकते हैं जिसे आप उपयोग करना चाहते हैं:

 @import AwesomeLibrary.AwesomeObject; 

Xcode 5 में बनाई गई सभी नई परियोजनाओं के लिए, मॉड्यूल डिफ़ॉल्ट रूप से सक्षम होते हैं। यदि आप पुरानी परियोजनाओं में मॉड्यूल का उपयोग करना चाहते हैं (और आप वास्तव में चाहिए) उन्हें प्रोजेक्ट की बिल्ड सेटिंग में सक्षम होना होगा। एक बार ऐसा करने के बाद, आप किसी भी चिंता के बिना अपने कोड में #import और @import statements दोनों का उपयोग कर सकते हैं

यह वर्तमान में केवल सिस्टम फ़्रेमवर्क में बनाया गया काम करता है यदि आप #import प्रयोग करते हैं तो एप्पल अभी भी ऐप प्रतिनिधि में UIKit फ़्रेमवर्क आयात कर रहा है, इसे बदल दिया जाता है (यदि मॉड्यूल चालू है और उसे सिस्टम फ्रेमवर्क के रूप में पहचाना गया है) और कंपाइलर इसे एक मॉड्यूल आयात करने के लिए रीमाएप करेगा और इसके आयात का नहीं होगा हेडर फाइल वैसे भी। तो #import को छोड़कर सिर्फ एक ही होगा, जैसा कि इसके बजाय एक मॉड्यूल आयात में परिवर्तित हो सकता है, जहां भी संभव हो

ऐसा लगता है कि जब XCode 7.xa बहुत चेतावनियां आ रही हैं जब CLANG_ENABLE_MODULES साथ CLANG_ENABLE_MODULES मॉड्यूल सक्षम करते CLANG_ENABLE_MODULES

3 पार्टी लाइब्रेरीज़ के साथ एक्सकोड 7 के साथ निर्माण करते समय कई चेतावनियां देखें

मॉड्यूल का उपयोग करने के कुछ लाभ हैं आप इसका उपयोग केवल ऐप्पल के ढांचे के साथ कर सकते हैं जब तक मॉड्यूल मैप बनाया नहीं जा सकता। @import कुछ प्री-कंपाइल करने वाले हेडर्स फ़ाइलों के समान है, जब .pch फ़ाइल में जोड़ा जाता है जो एक संकलन प्रक्रिया को ऐप करने का एक तरीका है। इसके अतिरिक्त आपको पुस्तकालयों को पुराने तरीके से जोड़ने की ज़रूरत नहीं है, वास्तव में @import का उपयोग करना बहुत तेज और कुशल है। यदि आप अभी भी अच्छे संदर्भ की तलाश करते हैं तो मैं आपको इस अनुच्छेद को पढ़ने की बहुत अनुशंसा करूँगा।