Ottima domanda. In effetti ho avuto la stessa domanda e l'ho studiata parecchio e penso che sia un buon posto per usare un protocollo (un'interfaccia a.k.a. in altre lingue). Questo è basato sulla citazione "Programma su un'interfaccia, non su un'implementazione" dal famoso Quaderno di "Gang of Four". Penso che sia meglio provare e programmare per il futuro in modo da non essere mai martellato se decidono di deprecare qualcosa (che non è il caso qui, ma non si sa mai).
Invece di scrivere classi, scrivere un protocollo che definisce i metodi che si desidera utilizzare e quindi creare 2 classi diverse che implementano tali metodi. Nella tua app crei un puntatore che può puntare a qualsiasi classe che implementa tutti i metodi dei protocolli e quindi ogni classe di implementazione può usare qualunque framework/librerie/altro codice che desidera realizzare.
A titolo di esempio, è possibile creare un protocollo Server come questo:
// Server.h
@protocol Server <NSObject>
@required
- (void)callService:(NSString *)service withData:(NSData *)data;
@end
e quindi creare una classe RestServer come questo:
// 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
e quindi creare un'altra classe come SoapServer:
// 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
Codifica l'app principale per utilizzare solo un puntatore all'interfaccia e ora puoi scambiare classe s, senza dover modificare il codice principale:
// 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]];
}
Ora è possibile modificare le classi di server ogni volta che si desidera e non hanno mai andare a caccia giù tutti i posti nel codice in cui si effettuano le chiamate a Callservice: Withdata :. QUESTO È IL VANTAGGIO DELLA PROGRAMMAZIONE ALLE INTERFACCE!
Ho usato Rest vs Soap perché pensavo che le persone più recenti su Objective-C potessero capirlo meglio, ma nel tuo caso potresti avere un ConnectionServer o un SessionServer o qualcosa del genere.
Un'altra buona lettura sulla programmazione di interfacce/protocolli può essere trovato qui: https://stackoverflow.com/a/384067/504873
controlla questo link per vedere un ottimo tutorial su NSURLSession: http://www.raywenderlich.com/51127/nsurlsession-tutorial – whyoz