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 看起来多么不灵活。