objective-cの中でinterfaceとprotocolの役割を詳しく説明します。


objective-cの中でinterfaceとprotocolの役割を詳しく説明します。
以前はObjective-Cのinterface、つまりヘッダファイルの役割はよく分かりませんでした。最近いくつかの文章を読んで、自分のテストを加えて、頭のファイルの役割に対して少し分かります。
私の考えでは、ヘッダファイルの役割は、対外的なインターフェースを定義することです。
しかし、その役割はこれだけです。ヘッド文書は対外インターフェースが必ず実現されることを保証できません。
hファイルが方法を定義しているかどうか、mファイルが実現されているかどうかによって、3つのクラスに分けられます。
一つは.hファイルの定義方法です。mファイルも方法を実現しました。これは最もcommonのやり方です。問題ないやり方です。
第二のクラスは.hファイル定義方法ですが.mファイルはこの方法を実装していません。このとき.mファイルの@implementaainコードは「imcomplette implementation」と表示されます。ヘッダファイルの定義方法と変数という意味で、完全には実現されていません。
例えば、hファイルにはこう定義されています。

@interface Test : NSObject{} 
 
-(void)hello; 
 
@end 
mファイルにはこの方法が実装されていません。外部ではこの方法を呼び出すことができます。コンパイルする時は大丈夫ですが、運転中に「unrecognized selector sent to instance」エラーが発生します。
第三のクラスは.hファイルは定義されていませんが.mファイルにはこの方法があります。
例えば、mファイルでこのように実現します。

#import "Test.h" 
 
@implementation Test 
 
-(void)hello{ 
  NSLog(@"hello world!"); 
} 
 
@end 
この時、hello()という関数はプライベート関数に相当します。外部ではなくクラスで[self hello]だけで呼び出すことができます。
ですから、objective-cの頭ファイルは、コンパイルする時に便利なだけで、本当のinterfaceではないと思います。
対照的に、プロトコールこそ本当の意味でのインターフェースです。その意味はJavaのインターフェースと同じです。
protocolの方法は二つのタイプに分けられています。一つは必ず実現しなければならないもので、一つは必ずしも実現しないものです。必ずしも実現するとは限らない方法は.hファイルで定義されているものと同じです。必ず実現しなければならない方法は比較的に役に立ちました。
このような方法を用いてハローというプロトコールを実現するクラスを初期化することができる。

id<Hello> test = [[Test alloc] init]; 
protocolはインタフェースとしての役割以外に、クラス間の相互作用の方法としてよく使われます。このときはdelegateといいます。delegateの主な役割は、一つの種類のやるべきことの一部を別の種類に完成させることです。ネット上でdelegateを紹介する文章は天地を覆い尽くして、ここで更に述べることを言いません。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。