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