Objective-Cは動的バインディングを使用します。つまり、メソッド呼び出しは実行時に解決されます。
罰金。
そして、ドット表記の使用は、実際にはメソッド呼び出しに要約されます
しかし、なぜ、私はこのようなことをすることができません:
#import <Foundation / Foundation.h>
int main(int argc、const char * argv []){
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//例外をインターセプトします
@試す
{{
@throw [NSException
exceptionWithName:@ "MEという名前の例外!"
理由:@「私がしたかったので」
userInfo:nil];
}
@catch(id exc)//例外オブジェクトへのポインタ?
{{
// NSLog(@ "%@:%@ \ n"、exc.name、exc.reason); //違法:メンバーのリクエスト
//構造体や和集合ではないものの「名前」。。
//Objective-cが動的バインディングとドット表記を使用する場合
//要約すると、ゲッターを呼び出してから、
//ここで具体的なタイプにキャストする必要があるのはなぜですか?
//具象型NSException*にキャストした場合にのみ機能します
NSException * nexc =(NSException *)exc;
NSLog(@ "%@:%@ \ n"、nexc.name、nexc.reason);
}
[プールドレン];
0を返します。
}
「動的バインディング」と聞くと、「スクリプト言語のように動作するはずだ」と思っていますが、JavaScriptのようなスクリプト言語と比べてObjective-Cの柔軟性が低いことに驚いています。