Subsorting basada en la versión de la plataforma de iOS

Estoy usando AFNetworking, tengo una subclass creada para AFHTTPSessionManager que funciona en iOS7, me gustaría saber que es posible que pueda henetworkingar la misma subclass, pero con una súper class diferente, diga AFHTTPRequestOperationManager según algunas directivas del preprocesador.

Gracias

La forma "estándar" de tratar con esto sería definir una interfaz para las funciones de su class, luego crear classs "antiguas" y "nuevas" para implementar la interfaz. Use una "fábrica" ​​para crear la correcta para el entorno de ejecución.

En su lugar, podría usar una class "wrapper" en lugar de la interfaz, una que crea la class específica de la versión internamente y las reenvía.

Aplicando el uso de una fábrica (en la forma de un clúster de class)

tenga en count que el código a continuación es solo una indicación, no se comstackrá desde una copy / pegado

@interface MyHTTPClient - (void) post:(NSURLRequest *)request params:(NSDictionary *)params @end @implementation MyHTTPClient - (id) init { if(iOS_version < 7) { return [[_MyiOS7HttpClient] alloc] init]; } else { return [[_MyiOS6HttpClient alloc] init]; } } - (void) post:(NSURLRequest *)request params:(NSDictionary *)params { NSAssert(NO, @"private instances should respond to this"); } @end 

ahora las instancias privadas, que no son visibles desde el proyecto (solo a través de MyHttpClient )

 #import "MyHttpClient.h" @implementation _MyiOS7HttpClient - (void) post:(NSURLRequest *)request params:(NSDictionary *)params { // use new ios7 session manager here to do stuff } @end 

y cree una class similar para MyiOS6HttpClient que no utiliza ninguna de las sesiones de gestión de iOS7.

Entonces, el Clúster de Clase en este caso te da:

  • Una interfaz limpia para MyiOS7HttpClient o MyIos6HttpClient través de MyHttpClient ,

  • Otro código no necesita saber qué instancia está utilizando en realidad.

  • No hay necesidad de reenvío de posts.

No puede hacer esto en time de compilation. El comstackdor no tiene idea de cuál de las versiones compatibles de iOS se ejecutará en su aplicación. Puede crear varias versiones de la class y crear la correcta según la versión de ejecución.