Definiendo categorías para protocolos en Objective-C?

En Objective-C, puedo agregar métodos a las clases existentes con una categoría, por ejemplo.

@interface NSString (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end

También es posible hacer esto con los protocolos, es decir, si hubo un protocolo NSString, algo como:

@interface <NSString> (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end

Quiero hacer esto ya que tengo varias extensiones para NSObject (la clase), usando solo métodos públicos de NSObject, y quiero que esas extensiones también funcionen con objetos que implementan el protocolo.

Para dar un ejemplo adicional, ¿qué sucede si deseo escribir un método logDescription que imprima la descripción de un objeto en el registro?

- (void) logDescription {
    NSLog(@"%@", [self description]);
}

Por supuesto, puedo agregar este método a NSObject, pero hay otras clases que no heredan de NSObject, donde también me gustaría tener este método, por ejemplo. NSProxy. Dado que el método solo utiliza miembros públicos de protocolo, sería mejor agregarlo al protocolo.

Edición: Java 8 ahora tiene esto con "métodos de extensión virtual" en las interfaces:http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf. Esto es exactamente lo que me gustaría hacer en Objective-C. No vi esta pregunta ganando tanta atención ...

Un saludo, Jochen

Respuestas a la pregunta(7)

Su respuesta a la pregunta