Usar una categoría para anular el método NSURL

Pregunta de las categorías:

Me gustaría colocar una categoría en NSURL que, al hacer otras cosas, anule el método de consulta para poder proporcionar una cadena de consulta desde una URL que no cumple con RFC 1808. ¿Es legal hacer algo así en mi categoría?

- (NSString *)query //real NSURL method { if (stringIsRFC1808) //want to get the default implementation return [super query]; else return somethingElse; //want to get my custom implementation } 

Gracias

El código as-is no es válido, ya que está utilizando [super query] , que no hace exactamente lo que espera que haga. Las categorías no son superclasss. Aquí [super query] intentará invocar - [NSObject query] – BOOM un error de selector no reconocido. Si está utilizando categorías para extender una class, no podrá llamar al método original; si no necesita esta funcionalidad, entonces usar categorías está bien; si lo necesita, sin embargo, debe considerar subclasss (¡incluso una mejor composition para Objets! Foundation) o usando el time de ejecución Objective-C para realizar el método swizzling , de esta manera tendrás acceso a la implementación original del método.

No debe usar categorías para anular los methods existentes. Las categorías se utilizan para mejorar el comportamiento de la class sin subdividirlo. (Aunque creo que podrías anularlo, Apple lo desaconseja)

Agregue su propio método, para no entrar en conflicto con el apple sdk. Considere a alguien en su empresa usando esta categoría: lo primero que hace es search en las bibliotecas de desarrolladores para saber qué hace este método.

Después de importar su categoría, ya no hace lo que debería hacer. ¡Apple no recomienda esto!