Objective-C uses dynamic binding: that is method calls are resolved at runtime.
Fine.
And use of dot notation really boils down to a method call
But, why then, can't I do something like this:
#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;
}
When I hear "dynamic binding" I'm thinking "so it should behave like a scripting language", and I'm surprised how inflexible Objective-C seems compared to a scripting language like JavaScript.