इसे थोड़ा अलग कोण से देख रहे हैं ... आपको यह तय करने की ज़रूरत है कि क्या आप myClassB
MyClassA
की संपत्ति होने के बारे में वास्तव में जानना चाहते हैं। उदाहरण के लिए, यदि आप केवल myString
का विज्ञापन करना चाहते हैं जिसे MyClassA
के माध्यम से प्राप्त किया जा सकता है। यह myString
के अंतर्निहित कार्यान्वयन को जानने से अन्य वर्गों को इन्सुलेट करता है। जब तक आपको MyClassB
का पर्दाफाश करने की आवश्यकता न हो, आपको इसे "शेष दुनिया" से छिपाना चाहिए।
इस मामले आप MyClassA.h बदल जाएगा इस प्रकार है:
//
// MyClassA.h
//
@interface MyClassA : NSObject
@property (strong, nonatomic, readonly) NSString *myString;
@end
MyClassA.m में, आप निम्नलिखित करना होगा।
//
// MyClassA.m
//
#import "MyClassA.h"
#import "MyClassB.h"
@interface MyClassA()
@property (strong, nonatomic) MyClassB *myClassB;;
@end
@implementation MyClassA
// Other meaningful code omitted
- (NSString *)myString {
return self.myClassB.myString;
}
@end
ध्यान दें कि क्या मैं यहाँ किया है एक गुमनाम श्रेणी का उपयोग करने के लिए आंतरिक रूप myClassB
के लिए संपत्ति को परिभाषित है।
यहां महत्वपूर्ण बात यह है कि MyClassB
दूसरों को बेनकाब नहीं करना है या नहीं। इस दृष्टिकोण का मुख्य लाभ यह है कि आपका कोड अधिक लचीला है। मान लें कि myString
एक अलग तरीका प्राप्त हुआ है। एक अलग वर्ग या अलग विधि से पूरी तरह से। कोड जो myString
उपभोग करने की आवश्यकता है, टीकाकरण किया जाता है।
आप MyClassB
का पर्दाफाश करने की जरूरत है, तो आप @class
उपयोग कर सकते हैं, जैसा कि ऊपर या #import MyClassB.h
MyClassA.h से टायलर द्वारा सिफारिश की। सर्वोत्तम अभ्यास @class
घोषित करने के लिए आगे निर्धारित करते हैं। लेकिन कभी-कभी कार्यान्वयन फ़ाइल के भीतर कई फाइलों को आयात करने की याद रखने की सुविधा जीत नहीं सकती है। यह आपका कोड-बेस है, इसलिए आप चुन सकते हैं कि कौन सा आपके लिए सबसे अच्छा काम करता है। मैं आम तौर पर दोनों के संयोजन का उपयोग करता हूं।
स्रोत
2016-09-08 03:37:28