शानदार सवाल। असल में मेरे पास एक ही सवाल था और मैंने थोड़ा सा शोध किया और मुझे लगता है कि प्रोटोकॉल (अन्य भाषाओं में ए.के.ए. इंटरफेस) का उपयोग करने के लिए यह एक अच्छी जगह है। यह प्रसिद्ध "गैंग ऑफ फोर" पैटर्न बुक से उद्धरण के आधार पर "एक इंटरफ़ेस पर प्रोग्राम, कार्यान्वयन नहीं है" से बाहर है। मुझे लगता है कि भविष्य के लिए कोशिश करना और कोड करना सबसे अच्छा है, इसलिए अगर मैं कुछ तोड़ने का फैसला करता हूं (जो यहां मामला नहीं है, लेकिन आप कभी नहीं जानते) तो मुझे कभी भी दिक्कत नहीं होती है।
कक्षाएं लिखने के बजाय, एक प्रोटोकॉल लिखें जो उन विधियों को परिभाषित करता है जिन्हें आप उपयोग करना चाहते हैं और फिर उन विधियों को लागू करने वाले 2 अलग-अलग वर्ग बनाएं। अपने ऐप में आप एक पॉइंटर बना सकते हैं जो कि किसी भी वर्ग को इंगित कर सकता है जो कि सभी प्रोटोकॉल विधियों को लागू करता है और फिर प्रत्येक कार्यान्वयन वर्ग जो भी ढांचे/पुस्तकालय/अन्य कोड का उपयोग कर सकता है, वे ऐसा करना चाहते हैं। SoapServer की तरह अन्य वर्ग
// RestServer.h
#import "Server.h"
@interface RestServer : NSObject <Server>
@end
// RestServer.m
#import "RestServer.h"
@implementation RestServer
- (void)callService:(NSString *)service withData:(NSData *)data {
// Code using REST
}
@end
और फिर बनाने के लिए::
उदाहरण के लिए, अगर आप इस तरह एक सर्वर प्रोटोकॉल बना सकते हैं:
// Server.h
@protocol Server <NSObject>
@required
- (void)callService:(NSString *)service withData:(NSData *)data;
@end
और उसके बाद इस तरह की एक RestServer वर्ग बनाने
// SoapServer.h
#import "Server.h"
@interface SoapServer : NSObject <Server>
@end
// SoapServer.m
#import “SoapServer.h"
@implementation SoapServer
- (void)callService:(NSString *)service withData:(NSData *)data {
// Code using SOAP
}
@end
इंटरफ़ेस में केवल पॉइंटर का उपयोग करने के लिए अपने मुख्य ऐप को कोड करें और अब आप क्लैस को स्वैप कर सकते हैं
// SomeViewController.m
#import “Server.h”
#import “RestServer.h”
#import “SoapServer.h”
…
- (void)someMethod() {
id<Server> myServer;
if ([self shouldIUseSoap])
myServer = [[SoapServer alloc] init];
else
myServer = [[RestServer alloc] init];
[myServer callService:@"loginUser" withData:[self getData]];
}
अब जब भी आप चाहते हैं आप सर्वर वर्गों को बदल सकते हैं और अपने कोड में सभी स्थानों पर जहां आप callService पर कॉल कर शिकार जाना है कभी नहीं: बिना रों अपने मुख्य कोड को बदलने के लिए withData :. यह इंटरफेस के लिए प्रोग्रामिंग का लाभ है!
मैंने आराम बनाम साबुन का उपयोग किया क्योंकि मैंने लोगों को उद्देश्य के लिए नया लगाया-सी बेहतर समझ सकता है, लेकिन आपके मामले में आपके पास एक कनेक्शन सर्वर बनाम सत्र सर्वर या ऐसा कुछ हो सकता है।
इंटरफेस के प्रोग्रामिंग पर एक और अच्छा पढ़ने/प्रोटोकॉल यहां पाया जा सकता: https://stackoverflow.com/a/384067/504873
NSURL सत्र पर एक महान ट्यूटोरियल देखने के लिए इस लिंक को देखें: http://www.raywenderlich.com/51127/nsurlsession-tutorial – whyoz