objective-c objective-c-runtime

objective c - NSProxy vs NSObject



objective-c objective-c-runtime (1)

El punto de NSProxy es que no implementa la mayoría de los métodos. Eso es necesario para asegurarse de que, para empezar, se invoque la maquinaria de reenvío de Objective-C. Si comienza con NSObject , hay muchos métodos que se enviarán directamente sin que usted tenga la oportunidad de reenviarlos.

Estaba usando el método swizzling para envolver todas las invocaciones de métodos en una clase con alguna funcionalidad adicional. Específicamente yo era:

  • Comprobando si el objeto requerido para esta llamada de método estaba en el caché
  • Si el caché tenía ese objeto, devuélvalo.
  • De lo contrario, envíe la implementación original, complete la memoria caché y devuélvala.

Para cada método, me gustaría redirigir a un método aconsejado. E implemente el nuevo método utilizando + (BOOL) resolutionInstanceMethod: (SEL) sel y IMP_implementationWithBlock.

Funcionó bien, pero el código no se leía bien. Parece que NSProxy proporcionará una manera mejor de implementar esta funcionalidad.

Pero aún otra alternativa, sería simplemente tener una subclase NSObject y llamadas de método de intercepción alrededor de los métodos de mi objeto objetivo. Al anular forwardInvocation y methodSignatureForSelector, puedo obtener el resultado requerido.

Entonces, ¿qué me da NSProxy? ¿Por qué debería usar esto en su lugar?