दिलचस्प पोस्ट
क्यों सीआई "और सीआई (, सीआई … … अलग ढंग से व्यवहार करते हैं? TOMCAT_HOME / lib फ़ोल्डर में JDBC ड्रायवर को क्यों रखा जाना चाहिए? क्या मेमोरी रिसाव बनाया जाता है यदि .Net में MemoryStream बंद नहीं होता है? कक्षाओं के लिए सीएसएस में वाइल्डकार्ड * नेटवर्क शेयर से कनेक्ट करते समय उपयोगकर्ता नाम और पासवर्ड कैसे प्रदान करें प्रत्येक ग्राहक के लिए एक एकल डेटाबेस का उपयोग करने के क्या फायदे हैं? makefile: 4: *** लापता विभाजक। रुकें सॉर्ट करने के लिए जावा में तुलनाकर्ता का उपयोग कैसे करें ऑब्जेक्ट के प्रकार का सरणी क्यों "ऑब्जेक्ट" लौटाता है और "ऐरे" नहीं? पायथन का उपयोग करके सूची में मूल्य बदलें चेक करें कि क्या कुकी सक्षम हैं jQuery अजाक्स – स्थिति कोड 0? फ़ाइल या विधानसभा को लोड नहीं किया जा सका 'सिस्टम। वेब। एचटीपी 4.0.0 अपडेट के बाद 2012 से 2013 तक एक क्या करता है पायथन में एक आयात स्टेटमेंट में क्या मतलब है? एक सी संरचना को दूसरे में ढकना

उद्देश्य-सी: फॉरवर्ड क्लास डिक्लेरेशन

मैं एक मल्टीविज़ ऐप लिख रहा हूं जो दृश्यों के बीच स्विच करने के लिए RootViewController नामक एक कक्षा का उपयोग करता है।

मेरे MyAppDelegate हेडर में, मैं RootViewController नामक rootViewController का एक उदाहरण बना देता rootViewController । मैंने ऐसे उदाहरण देखे हैं जहां @ वर्ग डायरेक्टिव को "फॉरवर्ड क्लास घोषणापत्र" के रूप में प्रयोग किया जाता है, लेकिन मुझे पूरा यकीन नहीं है कि इसका क्या मतलब है या पूरा करता है।

 #import <UIKit/UIKit.h> @class RootViewController; @interface MyAppDelegate . . . 

वेब के समाधान से एकत्रित समाधान "उद्देश्य-सी: फॉरवर्ड क्लास डिक्लेरेशन"

यह मूल रूप से कंपाइलर को बताता है कि कक्षा RootViewController मौजूद है, यह निर्दिष्ट किए बिना कि यह वास्तव में कैसा दिखता है (यानी: इसकी विधि, गुण, आदि)। आप इसका उपयोग उस कोड को लिखने के लिए कर सकते हैं जिसमें पूर्ण वर्ग घोषणा शामिल किए बिना RootViewController सदस्य चर शामिल हैं।

यह परिपत्र निर्भरता को हल करने में विशेष रूप से उपयोगी है – उदाहरण के लिए, जहां ClassB* का एक सदस्य है, और ClassB में ClassB ClassB* सदस्य है। आपको ClassB से पहले उपयोग करने से पहले ClassB घोषणा करनी होगी, लेकिन आपको ClassB में इसका उपयोग करने से पहले ClassB की भी आवश्यकता होगी। आगे की घोषणाओं से आप ClassB को यह कहकर इस पर काबू पाने की अनुमति दे सकते हैं कि ClassB's पूर्ण विनिर्देश को वास्तव में निर्दिष्ट किए बिना ClassB मौजूद है।

एक और कारण है कि आपको बहुत आगे की घोषणाएं मिलती हैं कुछ लोग अग्रेषित होने वाले कक्षाओं के एक सम्मेलन को अपनाते हैं, जब तक कि उन्हें पूर्ण घोषणा शामिल न हो। मुझे पूरी तरह से याद नहीं है, लेकिन संभवतः ऐसा कुछ ऐसा है जो एप्पल इसके उद्देश्य-सी मार्गदर्शक शैली दिशानिर्देशों की सिफारिश करता है।

मेरे उपरोक्त उदाहरण को जारी रखते हुए, यदि आपकी ClassA.h और ClassB.h क्रमशः ClassA.h और ClassB.h फाइलों में है, तो आप को किसी भी वर्ग में अपनी घोषणा का उपयोग करने के लिए #import करने की आवश्यकता होगी। आगे की घोषणा का अर्थ है कि आपको #import आवश्यकता नहीं है, जो कोड को सुंदर बना देता है (विशेषकर एक बार जब आप काफी कुछ कक्षाएं इकट्ठा करते हैं, जिनमें से प्रत्येक को `# इंपोर्ट जहां उपयोग किया जाता है) की आवश्यकता होती है, और कम से कम प्रदर्शन को संकलित करता है किसी भी फाइल को संकलित करते समय संकलक को संहिता की आवश्यकता होती है

एक तरफ, हालांकि सवाल केवल उद्देश्य-सी में अग्रेषण घोषणाओं से संबंधित है, सभी कार्यवाही टिप्पणियां सी और सी ++ (और संभवत: कई अन्य भाषाओं) में कोडिंग के लिए समान रूप से लागू होती हैं, जो आगे की घोषणा का भी समर्थन करती हैं और आमतौर पर इसके लिए उपयोग करती हैं वही उद्देश्य