13, "métodos de la técnica de formulación" Depuración "método de la caja negro" como se usa


     Objective-C objetos después de recibir el mensaje, lo que hay que resolver un procesamiento de llamada a un método en tiempo de ejecución ah. El método de selección el nombre dado a la relativa sub-bebida se puede cambiar en tiempo de ejecución. (Función Line, tenga efecto en todas las instancias de esta clase, pero no se limita a esos ejemplos subclases de sobrescritura métodos asociados) Este esquema menudo se convierten en "método de formulación"
     lista de selección de nombre de la clase sub-método se asignará a la relevante la implementación del método, el "sistema de distribución de mensajes dinámicos" en virtud de encontrar una manera de ser capaz de llamar. Estos métodos están representados en forma de punteros de función, este puntero se llama IMP, como prototipo de
     Identificación (* Imp) (el ID de SEL, ...)
     lowercaseString respuesta de la clase NSString (en minúsculas), uppercaseString (mayúsculas) / capitalizedString como seleccione hijo. Cada niño seleccionado esta tabla de asignaciones se asignan a diferentes IMP.
     object_20191120_001.png figura
     de P53
     en el sistema de tiempo de ejecución de Objective-C proporciona varios métodos son capaces de operar esta tabla. Los desarrolladores pueden añadir selectores de la misma, pueden ser cambiados correspondiente al método de seleccionar el sub implementado, también puede ser intercambiado en dos sub-mapa puntero de selección.
     Figura object_20191120_002.png
     por encima de modificaciones sin escribir una subclase, basta con modificar el "partido emitió un" diseño, mostrará todas las instancias de NSString en el programa.
     
     Intercambio de dos métodos para lograr
     method_exchangeImplementations void (Método M1, Método m2 );
     
     dos parámetros para esta función a ser representado por dos interactuar método implementado, y un método para realizar la función se puede obtener mediante la siguiente
     
     Método class_getInstanceMethod (Clase AClass, SEL aSelector )
     
     método con una función como esta despegado de la clase de acuerdo con una selección dada. Ejecutar el siguiente código, y para intercambiar lowerecaseString uppercaseString lograr el método antes mencionado
     
     método, originalMethod class_getInstanceMethod = ([clase NSString], @selector (lowercaseString));
     
     Método, swappedMethod class_getInstanceMethod = ([clase NSString], @selector (uppercaseString));
     method_exchangeImplementations (originalMethod, swappedMethod);
     
     de ahora en adelante, si se llama a la instancia lowercaseString NSString, se logrará la ejecución del original uppercaseString la
     realización de tales métodos de intercambio directo, importancia. Sin embargo, puede agregar nuevas características y alguna forma de lograrlo es por este medio.
     Ejemplo: registro de determinados datos cuando se llama lowercaseString, es objeto secundario se logra mediante el método de intercambio que se puede lograr. Vamos a escribir un nuevo método para lograr una funcionalidad adicional requerida en este método, y llamar a la implementación original.
        El nuevo método se puede añadir a NSString de "categoría" (categoría) en:
     @interface NSString (LJLMyAdditions)
     - ljl_myLowercaseString (* NSString);
     @end
     
     la lowercaseString original (en minúsculas) ljl_myLowercaseString método de intercambio. Un nuevo método de código de aplicación se puede escribir
     @implementation NSString (LJLMyadditions)
     - (NSString *) ljl_myLowercaseString {
        NSString * minúsculas = [Auto lowercaseString];
        NSLog (@ "% @ =>% @", Mismo, en minúsculas);
        minúscula de retorno;
     }
     @end
     
     se parece a una llamada recursiva para el ciclo de la muerte, sino porque este método es que los métodos y lowercaseString intercambiables, por lo que en tiempo de ejecución, ljl_myLowercaseString selectores en realidad corresponde a los métodos lowercaseString originales. método Finalmente, las siguientes dos códigos para el intercambio de implementadas:
     
     Método, originalMethod = class_getInstanceMethod (NSString clase, @selector (lowercaseString));
     SwappedMethod = class_getInstanceMethod Método, (clase NSString, @selector (ljl_myLowercaseString));
     method_exchangeImplementations (originalMethod, swappedMethod);
     
    a continuación, realizar un mensaje fila lowercaseString se salida
     
     normalmente por un método de esta realización (método de la caja negro) da a conocer sin aumentar la explotación forestal, útil para depurar.
     
     Clave:
     1, en tiempo de ejecución, puede seleccionar los tipos de métodos nuevos o alternativos para lograr sub-le corresponde.
     2, utilizar otro método de aplicación para sustituir la aplicación original, este procedimiento se denomina "método de asignación", los desarrolladores utilizan esta tecnología para añadir nuevas funcionalidades a la aplicación existente
     3, en general, sólo el depurador cuando se necesita método de modificación de tiempo de ejecución para lograr esta práctica no se abusa.

 

参考: A partir del objetivo-C2.0
    

Publicado 83 artículos originales · ganado elogios 12 · vistas 180 000 +

Supongo que te gusta

Origin blog.csdn.net/shengdaVolleyball/article/details/103186842
Recomendado
Clasificación