混合 - swift objective-c 呼び出し




Objective Cの動的バインディングと動的タイピングの違いは何ですか (3)

Objective Cの動的バインディングと動的タイピングの違いについて理解するのは困難です。誰かがこれを説明できますか。


Objective-Cでの動的型付けは、 id型のオブジェクトのクラスがコンパイル時には不明であり、メッセージがオブジェクトに送信されるときに実行時に検出されることを意味します。 例えば、次のコードでは、 fooのクラスはメッセージcomponentsSeparatedByString:を送ろうとするまで知られていませんcomponentsSeparatedByString:

id foo = @"One Two Three";
NSArray *a = [foo componentsSeparatedByString:@" "];

idデータ型を使用せずに次のようにした場合は...

NSString *foo = @"One Two Three";

...それでは、動的型ではなく静的型を使用します。

動的バインディングは、どのメソッド実装が選択されるのかをコンパイラが認識していないことを意味します。 代わりに、メッセージが送信されるときにメソッド実装が実行時に調べられます。 それは基本的にPolymorphism助けてくれます。 そう

[foo description]

たとえば、 fooNSStringインスタンスではなくNSArrayインスタンスである場合は、異なるメソッド実装が呼び出されます。


あなたがJavascriptに精通しているならば、目的Cの動的型付けはJavascriptの 'var'のものとほとんど同じです。この変数の実際の型は実行時にそして一旦それが割り当てられると考え出されます。 実行時に保持されているオブジェクトの型が「認識されないセレクタ」実行時例外のようにわからない場合は、何度でも再利用および再入力が可能です。 。 Objective-Cでは、すべてのオブジェクトはid型であるため、id型の変数は動的型指定に使用できます。

オブジェクトに対する動的バインディングは、実行時に呼び出されるオブジェクトの種類に基づいて正しいメソッドが呼び出される「多態的」な動作です。

私はそれが役立つことを願っています


動的型付けでは、任意の型のオブジェクトを格納できるid型の変数を持つことができます。 動的バインディングを使用すると、これを実行できますid obj; [obj doWhatever]; id obj; [obj doWhatever]; そして、 obj-(void)doWhateverを実装する型である限り、それは機能します。





objective-c