2011-02-08 6 views
7

मुझे अच्छी तरह से पता है कि अंगूठे का सामान्य नियम आपको केवल कक्षा-इंटरफेस, प्रोटोकॉल इंटरफेस इत्यादि को आयात करना चाहिए-एक कक्षा के लिए @class को संकलित करने और अग्रेषित किए जा सकने वाले सभी चीज़ों के लिए उपयोग करना चाहिए।क्या यह हमेशा उद्देश्य-सी इंटरफेस में पूर्ण आवश्यक से अधिक आयात करने के लिए अनुचित है?

#import "ClassA.h"  // Previously, @class ClassA; 
#import "ClassB.h"  // Previously, @class ClassB; 
#import "ClassC.h"  // Unnecessary to forward-declare 

@interface ClassD : NSObject 

@property (nonatomic, retain) ClassA * classAObject; 
@property (nonatomic, retain) ClassB * classBObject; 
@property (nonatomic, copy) NSArray * classCObjects; 

@end 

सबसे पहले, मैं बस आगे घोषित ClassA और ClassB (के रूप में classCObjects के घटकों ही अनुबंध द्वारा ClassC के होते हैं: हालांकि, मैं इस परिदृश्य में जो मैंने महसूस किया #import की तरह एक और अधिक उपयुक्त समाधान था में भाग)। यह मेरा प्रारंभिक वृत्ति था।

लेकिन ClassD कहीं और उपयोग करने के लिए कोशिश कर के बाद, मैं जल्दी से पता चला है कि मैं भी ClassA, ClassB, और ClassC आयात करने के लिए साथ ClassD हर जगह मैं इसे इस्तेमाल किया के साथ किया था। ऐसा लगता है कि किसी अन्य वर्ग को ClassD का उपयोग करते समय परवाह नहीं करना चाहिए। मेरी सोच यह थी कि, मूल रूप से, ClassD का उपयोगकर्ता वास्तव में केवल ClassD.h आयात करने की परवाह करता है और मान लीजिए कि यह पूरे #import कथनों के समूह के बिना पूरी कक्षा के साथ काम कर सकता है। उपर्युक्त दृष्टिकोण को देखते हुए, मैंने मूल रूप से ClassD के डोमेन के भीतर अपने इंटरफ़ेस में काम करने के लिए आवश्यक सबकुछ शामिल किया है।

क्या कोई ठोस कारण है कि यह दृष्टिकोण आदर्श नहीं है, इसके अलावा "आप संकलन के लिए बिल्कुल जरूरी है?"

उत्तर

10

हालांकि आप जिस रणनीति का पालन कर रहे हैं - अधिक से अधिक आयात न करें - भयानक, उत्तम दर्जे का शैली और सामान्य रूप से लक्ष्य रखने के लिए एक बड़ी बात है, मुश्किल मामलों को बहुत ज्यादा पसीना न करें। बस आपको #import की आवश्यकता है।

प्रैक्टिस में, आधुनिक मशीन पर, #import आईएनजी पर एकमात्र प्रभाव आपके संकलन समय में कुछ अनावश्यक माइक्रोसेकंड जोड़ना होगा। अपने ऐप को अजीब बनाने के लिए सहेजे गए डेवलपर समय का उपयोग करें। :)

+0

+1: मैं कहने की प्रक्रिया में था, लेकिन बेहतर कहा :) – Mac

+0

यही मेरा अहसास था, लेकिन मैं यह सुनिश्चित करना चाहता था कि परिणामस्वरूप मैं कुछ और महत्वपूर्ण डिजाइन प्रिंसिपल का उल्लंघन नहीं कर रहा था। मेरे लिये कार्य करता है। :) – LucasTizma

+1

'# आयात 'सीधे सी पर सबसे अच्छा सुधार हो सकता है कि ओब्जे-सी ऑफ़र करता है। ;) इसका इस्तेमाल करें, इसे प्यार करें, और इसे पसीना न करें। वैसे भी मैं रोल कैसे करता हूं। सौभाग्य। –

1

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

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

  • कोई संबंधित समस्या नहीं^_^