2011-06-21 6 views
4

は、私がUITextInputDelegateプロトコルを実装するクラスをMyViewControllerの仕様を作成するためにプロトコルを指定するのに、必要なメソッドを実装しないのはなぜコンパイルエラーではないのですか? Objective-Cで

@interface MyViewController : UIViewController <UITextInputDelegate> 

ような何かを行うことができます。さて、このプロトコルにはいくつかの必須メソッドがあるので、実際には.mファイルに実装されていない限り、コンパイラはコードをまったくコンパイルできないと思います。それ以外は、これがコンパイルされます。コンパイラはの警告を吐き出すので、私は必要なメソッドを実装していないことを明らかにしていますが、なぜこれを言語デザイナーの一員としてコンパイルするのが理にかなっているのでしょうか。

+0

コードをコンパイルしてもクラッシュする可能性があるわけではありません。コンパイラはあらゆる種類のバグを解決します。デバッガがあなたの後ろにあります。 – PengOne

答えて

7

コードをコンパイルできないと、コンパイラエラーが発生します。 objective-cは動的言語であるため、メソッドを実装していないとしても、コードがコンパイルされることはありません。つまり、メソッドが直接リンクされていないため、コンパイル時にそのメソッドの位置を知る必要はありません。警告は、実行時にエラーを引き起こす可能性があるものの、コードが正常にコンパイルされたことを意味します。

2

ughoavgfhwが指摘したように、言語の動的な性質によって実行時にこれらのメソッドを追加できるため、エラーではありません。メソッドがコンパイル時に見つからないという理由だけで、実行時にメソッドが存在しないというわけではありません。

関連する問題