de Objective-C utiliza enlace dinámico: es decir las llamadas a métodos se resuelven en tiempo de ejecución.unión dinámica parece como una mentira
Bien.
Y use of dot notation really boils down to a method call
Pero, ¿por qué entonces, no me puede hacer algo como esto:
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // Intercept the exception @try { @throw [ NSException exceptionWithName:@"Exception named ME!" reason:@"Because i wanted to" userInfo:nil ] ; } @catch(id exc) // pointer to an exception object? { //NSLog(@"%@ : %@\n", exc.name, exc.reason) ; // ILLEGAL: Request for member // 'name' in something not a structure or union.. // If objective-c uses dynamic binding, and dot notation // boils down to calling the getter, then // WHY do I have to cast to the concrete type here? // Only works if I cast to the concrete type NSException* NSException* nexc = (NSException*)exc ; NSLog(@"%@ : %@\n", nexc.name, nexc.reason) ; } [pool drain]; return 0; }
Cuando escucho "Enlace dinámico" Estoy pensando en "lo que debe comportarse como una scripting language ", y me sorprende la inflexibilidad de Objective-C en comparación con un lenguaje de scripting como JavaScript.
Estás confundiendo el enlace dinámico con el pastel. El pastel es una mentira. –
_ "Las llamadas al método se resuelven en tiempo de ejecución" _ realmente debería considerarse como _ "el envío de mensajes ocurre en el tiempo de ejecución" _. El uso del _dot operator_ completo es más un hack que cualquier otra cosa. –
No hay nada de hackish al respecto; es un sinónimo muy bien definido para una llamada de método con una restricción adicional que el tipo debe ser bien conocido. (Si a alguien le gusta o no el punto o piensa que es una buena adición, es una opinión completa, sin comentarios :). – bbum