Objective-C 使用动态绑定:即方法调用在运行时解决。
美好的。
但是,为什么我不能做这样的事情:
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // 拦截异常 @尝试 { @throw [ NSException exceptionWithName:@"名为 ME 的异常!" 原因:@“因为我想” 用户信息:无]; } @catch( id exc ) // 指向异常对象的指针? { //NSLog(@"%@ : %@\n", exc.name, exc.reason ) ; //非法:请求成员 // 'name' 在不是结构或联合的东西中。. // 如果objective-c 使用动态绑定,和点符号 // 归结为调用 getter,然后 // 为什么我必须在这里转换为具体类型? // 仅当我转换为具体类型 NSException* 时才有效 NSException* nexc = (NSException*)exc ; NSLog(@"%@: %@\n", nexc.name, nexc.reason) ; } [池排水]; 返回0; }
当我听到“动态绑定”时,我在想“所以它应该表现得像一种脚本语言”,我很惊讶与 JavaScript 这样的脚本语言相比,Objective-C 看起来多么不灵活。