2013-07-09 4 views
6

मैं आज ज्ञान के लिए खोज कर रहा हूं।.h और .m फ़ाइलों में उद्देश्य-सी

मैं काम के लिए कुछ कोड पर काम कर रहा हूँ, और समीक्षा के बाद मैं पूरी तरह से मस्तिष्क गोज़ था और याद नहीं कर सकते इसलिए हम उद्देश्य-सी में ज के साथ कुछ और .m फ़ाइलों करना

  1. मैं सोच रहा था कि हम फ़ाइलों को आयात क्यों करते हैं और .h फ़ाइलों में विधि नाम क्यों घोषित करते हैं? (मुझे पता है कि इसे प्रसंस्करण के साथ करना है, लेकिन विवरण याद नहीं कर सकते हैं)
  2. हम कभी-कभी फ़ाइलों को सीधे .m फ़ाइल में क्यों आयात करते हैं, न कि कुछ मामलों में .h फ़ाइलों में।
  3. जब आपने .h फ़ाइल में कोई विधि घोषित की है तो आप ऐसा कर रहे हैं क्योंकि आप जिस वर्ग और/या पुस्तकालयों का उपयोग कर रहे हैं, वे एक फ़ंक्शन नहीं करते हैं जिसके लिए आपको भी आवश्यकता होती है?
  4. क्या कोई ऐसा मामला है जहां आपने एक ऐसी विधि घोषित की है जो आपकी किसी भी पुस्तकालय या आपकी .h फ़ाइल में मौजूद नहीं है।

धन्यवाद सबको मुझे उम्मीद है कि सभी समझ में आएंगे।

+0

मुझे डर है कि वास्तव में कोई भी समझ में नहीं आया है। :( –

+4

एआरएम ... यह सही समझ में आया। बस जवाब दे रहा है। – Fogmeister

उत्तर

15
  1. इसका उपयोग कक्षा के सार्वजनिक और निजी भागों के बीच अलग करने के लिए किया जाता है। .m फ़ाइल implementation है। यह वह जगह है जहां सभी तर्क चलाते हैं, सभी डेटा संसाधित और संग्रहीत होते हैं, आदि ... .h फ़ाइल उस वर्ग के interface है। यह सचमुच आपकी खुद की कक्षा के लिए एक एपीआई की तरह है। यह अन्य वर्गों को इसका उपयोग कैसे करता है और इसके साथ इंटरफ़ेस कैसे करें।

  2. जब आप किसी फ़ाइल में संदर्भित करते हैं तो आप कक्षा आयात करते हैं। यदि आप इंटरफेस में कुछ (यानी एक संपत्ति) का संदर्भ देते हैं तो आप इसे .h में आयात करते हैं। यदि आप केवल कार्यान्वयन में इसका संदर्भ देते हैं तो आप इसे .m में आयात करते हैं।

  3. .h में घोषित कोई भी विधियां हैं ताकि अन्य वर्गों को पता चले कि वे इसे चला सकते हैं। यानी वे सार्वजनिक तरीके हैं। घोषणा की कोशिश करें और हटाएं और फिर उस विधि को कॉल करें। आपको एक चेतावनी मिलेगी।

  4. नहीं, यह समझ में नहीं आता है। जब तक आप अपने कार्यक्रम को लिखकर भाग नहीं लेते थे और परीक्षण उद्देश्यों के लिए इसे घोषित नहीं करते थे।

+0

प्रश्न के उत्तर के प्रति 2. मुझे लगता है कि मैं पहले भाग को समझता हूं। क्या आप एक कार्यान्वयन को संदर्भित करने के बारे में दूसरे भाग का उदाहरण उपयोग कर सकते हैं। – Jadex1

+0

जब मैंने कहा "कार्यान्वयन में इसका संदर्भ" मैं बस इसका मतलब एमएम कक्षा में उपयोग करना चाहता था। जैसे यदि आप 'MyCustomClass' नामक एक कस्टम क्लास बनाते हैं और उसके बाद एक व्यू कंट्रोलर में आप इसका उपयोग करने का निर्णय लेते हैं। फिर आपको इसे .m फ़ाइल में आयात करने की आवश्यकता होगी। – Fogmeister

3
  1. क्योंकि ज फ़ाइल वर्ग के सार्वजनिक इंटरफ़ेस
  2. है क्योंकि मीटर फ़ाइल में आयात डाल उन्हें निजी बना देता है और ज फ़ाइल से बाहर निर्भरता रहती है (अत्यधिक निर्भरता आयात और संभावित circularities रोकता है)
  3. आप इसे सार्वजनिक रूप से बताते हैं कि आप उस सेवा को
  4. नहीं करना चाहिए, यदि यह अस्तित्व में नहीं है तो आप इसका उपयोग नहीं कर सकते हैं (हालांकि आप उन चीज़ों की घोषणा कर सकते हैं जिन्हें आप उम्मीद करेंगे और पहले जांचें आप वास्तव में उनका उपयोग करने का प्रयास करते हैं)

2 के लिए बोनस अतिरिक्त। आपकी .h फ़ाइल में आपको कम से कम आयात की संभावना (केवल सुपरक्लास और किसी भी प्रोटोकॉल को सार्वजनिक रूप से कार्यान्वित करने) का प्रयास करना चाहिए और अन्य सभी चीज़ों के लिए @class का उपयोग करना चाहिए। यह निर्भरता प्रभाव को कम करता है।

+0

आपकी व्याख्या के लिए धन्यवाद जो मेरी मदद करता है। इसलिए .h फ़ाइल में विधियों को रखने से उन्हें निजी रखने में मदद मिलती है। – Jadex1

+0

@ जेडएक्स 1 अगर मैं सही हूं तो यह है ।एम फ़ाइल जो निजी है, क्योंकि फोगमेस्टर कहता है: "एमएम फाइल कार्यान्वयन है। यह वह जगह है जहां सभी तर्क चलते हैं, सभी डेटा संसाधित और संग्रहीत होते हैं, आदि"। – 0x1ad2

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