Aunque el elenco NSObject *
que trajo Dave funcionará, hay una manera alternativa más limpia que permite que las personas usen los protocolos como es de esperar; puede hacer que el protocolo declare que es compatible con el protocolo NSObject.
NSObject no es solo una implementación sino también un protocolo que incluye todas las variantes del método performSelector :. Por lo que simplemente puede declarar en su protocolo que usted apoya NSObject como lo haría con cualquier otra clase de apoyo a un protocolo:
@protocol MyProtocol <NSObject>
Y las advertencias del compilador se desvanecerán (suponiendo que haya importado la definición del protocolo).
Tenga en cuenta que esto significa que cualquier persona que declare que admite su protocolo tendría que ser un NSObject o heredar muchos métodos. Pero todas las clases utilizadas en la programación de iPhone se derivan de NSObject debido a consideraciones prácticas, por lo que generalmente no es un problema.
EDIT:
Resulta que el -performSelector:withObject:afterDelay:
no es en el protocolo NSObject (los que no tienen el retraso son). Debido a que es aún más agradable para todos los que usan su protocolo si solo pueden usar el id para hacer referencia a un tipo de protocolo, igual usaría un protocolo para resolverlo, pero usted mismo tendría que declarar una extensión al protocolo NSObject. Por lo tanto, en el encabezado de su archivo puede agregar algo como:
@protocol MyProtocolNSObjectExtras <NSObject>
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
@end
@protocol MyProtocol <NSObjectExtras>
....
@end
Luego obtiene los mismos beneficios que describí anteriormente.
¡Perfecto! ¡¡¡¡¡¡Eso es!!!!!! – SpaceDog
@Dave Probablemente he aprendido más acerca de Objective-C en SO de usted más que nadie. ¡Gracias! –
@Jacob eres bienvenido :) –