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の柔軟性が低いことに驚いています。