मुझे अच्छी तरह से पता है कि अंगूठे का सामान्य नियम आपको केवल कक्षा-इंटरफेस, प्रोटोकॉल इंटरफेस इत्यादि को आयात करना चाहिए-एक कक्षा के लिए @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
के डोमेन के भीतर अपने इंटरफ़ेस में काम करने के लिए आवश्यक सबकुछ शामिल किया है।
क्या कोई ठोस कारण है कि यह दृष्टिकोण आदर्श नहीं है, इसके अलावा "आप संकलन के लिए बिल्कुल जरूरी है?"
+1: मैं कहने की प्रक्रिया में था, लेकिन बेहतर कहा :) – Mac
यही मेरा अहसास था, लेकिन मैं यह सुनिश्चित करना चाहता था कि परिणामस्वरूप मैं कुछ और महत्वपूर्ण डिजाइन प्रिंसिपल का उल्लंघन नहीं कर रहा था। मेरे लिये कार्य करता है। :) – LucasTizma
'# आयात 'सीधे सी पर सबसे अच्छा सुधार हो सकता है कि ओब्जे-सी ऑफ़र करता है। ;) इसका इस्तेमाल करें, इसे प्यार करें, और इसे पसीना न करें। वैसे भी मैं रोल कैसे करता हूं। सौभाग्य। –