2012-03-17 10 views
47

मैं एक नया iOS 5 परियोजना शुरू की है और प्रत्येक मीटर फ़ाइल.m फ़ाइलों में खाली @interface घोषणा क्या है?

#import "HomeViewController.h" 

@interface HomeViewController() 

@end 

@implementation HomeViewController 
@synthesize ... 
  • के शीर्ष पर कुछ नया देखा इस अतिरिक्त @interface ... आवश्यकता है, तो मैं एक अलग ज फ़ाइल है?
  • यह पूर्व आईओएस 5 परियोजनाओं में क्यों नहीं दिखाया गया?
  • क्या मैं इसे अलग .h फ़ाइल रखने के बजाय उपयोग कर सकता हूं?
  • आगे बढ़ने के लिए सबसे अच्छा अभ्यास क्या है?
+0

। – janusbalatbat

+0

संभावित डुप्लिकेट [.h और .m फ़ाइल में @interface परिभाषा के बीच अंतर] (http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file) –

उत्तर

79

यह class extension है। आप घोषणाओं के लिए इसका उपयोग कर सकते हैं कि आप .h फ़ाइल में नहीं रहना चाहते हैं।

इसका उपयोग कई डेवलपर्स द्वारा किया गया था, यहां तक ​​कि पहले भी, जिन्होंने मैन्युअल रूप से .m फ़ाइल में एक्सटेंशन जोड़ा था। तो मुझे लगता है कि ऐप्पल ने इसे टेम्पलेट में शामिल किया क्योंकि इसका व्यापक रूप से उपयोग किया जाता है और इसे एक अच्छा अभ्यास माना जाता है।

वास्तव में, .h फ़ाइल का उपयोग केवल अन्य फ़ाइलों से उपयोग की जाने वाली घोषणाओं के लिए किया जाना चाहिए। आपको कुछ गुण, विधियों या स्थिरांक घोषित करना पड़ सकता है जिनका उपयोग केवल .m फ़ाइल के अंदर किया जाएगा। उन घोषणाओं के लिए, उन्हें कक्षा विस्तार में बनाना बेहतर है।

तो आपके सवालों के जवाब:

  • इस अतिरिक्त @interface ... आवश्यक अगर मैं एक अलग ज फ़ाइल है?

नहीं, यह आवश्यक नहीं है लेकिन यह एक सर्वोत्तम अभ्यास है।

  • यह पूर्व आईओएस 5 परियोजनाओं में क्यों नहीं दिखाई दिया?

यहां तक ​​कि अगर यह एक आमतौर पर इस्तेमाल किया अभ्यास था, यह टेम्पलेट में शामिल नहीं किया गया था।

  • मैं एक अलग ज फ़ाइल होने के बजाय इसका उपयोग कर सकते हैं?

सं वर्ग विस्तार .h फ़ाइल जहां "सार्वजनिक" अपने वर्ग के इंटरफेस घोषित करने के लिए है प्रतिस्थापित नहीं करता।

  • आगे बढ़ने के लिए सबसे अच्छा अभ्यास क्या है?

आप कक्षा विस्तार में सभी घोषणाओं कि .m फ़ाइल के दृश्य के बाहर होने की जरूरत नहीं है रखना चाहिए।

+0

इस तरह के एक पूर्ण जवाब के लिए धन्यवाद! सेब को देखने में खुशी है कि यह नए टेम्पलेट में शामिल है क्योंकि यह एक बेहतरीन प्रथा है कि अधिकांश डेवलपर्स वैसे भी लागू कर रहे हैं! –

11

कार्यान्वयन फ़ाइल में इंटरफ़ेस अनुभाग आपको वेरिएबल्स, गुणों और विधियों को निजी घोषित करने की अनुमति देता है, जिसका अर्थ है कि वे अन्य वर्गों द्वारा नहीं देखे जाएंगे।

नहीं, इसकी आवश्यकता नहीं है। लेकिन मैं जितना संभव हो उतना उपयोग करता हूं और केवल उन चीजों को सार्वजनिक करता हूं जिन्हें अन्य वर्गों को देखने की ज़रूरत होती है। Encapsulation के लिए

+2

इस अर्थ में निजी है कि कंपाइलर वर्ग के बाहर चर, गुण और विधियों को नहीं देखता है, लेकिन जैसा कि हम उद्देश्य-सी विधियों का उपयोग कर रहे हैं वैसे भी वास्तव में निजी नहीं हैं क्योंकि कोई भी कुछ भी कॉल कर सकता है ... –

+1

आप सही हैं, बेशक ... मैं अभी भी कभी-कभी सी ++ में सोचता हूं। –

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