self[self.mapView.delegate self];とは異なりますが、[self.mapView setDelegate:self];関連するものです。後者の自己は、使用されるスコープ内のオブジェクトを表しますが、NSObject プロトコルで定義され[object self]たメソッドです。-(id)self
ドキュメントから:
self
受信者を返します。(必要)
- (id)self
戻り値 受信者。
提供状況 OS X v10.0 以降で利用可能。
NSObject クラスは NSObject プロトコルを実装しているため、コードで使用するほぼすべてのオブジェクトがこのメソッドを理解します。
手がかり、それが何に役立つかは、GNUStepのドキュメントを提供します:
自己
- (id) self;
可用性: OpenStep
レシーバーを返します。プロキシでは、これはプロキシされたオブジェクトを返す場合があります (必須ではありません)。
プロキシに使用できます。
また、KVC では、 と呼ばれるメソッドがあると便利です。これはself、オペレーターが正しいキー パスを必要とするためですが、実際にはオブジェクト自体が必要なものです。
NSArray *numbers = @[@1, @1, @2 ,@3, @5]
NSNumber* sum = [numbers valueForKeyPath: @"@sum.self"];
sumとなります12。
[self.mapView setDelegate:self];基本的self.mapView.delegate = self;にself、各 Objective-C メッセージは、少なくとも 2 つのパラメーターを受け取る C 関数に変換されます。-setDelegate:実行時に変換されます
void setDelegate(id self, SEL _cmd, id delegate)
{
// implementation ....
}
ここでわかるように、selfは、ランタイムによって最初のパラメーターとして渡されるオブジェクトのデフォルト名に過ぎず、メソッドが定義されているクラスのオブジェクトを参照します。
よくキーワードと言われますが、そうでselfはありません。それは単なる慣習です。C 関数、実装 IMP 型、およびセレクター SEL 型を使用して Objective-C メソッドを構築できるため、thisC++ の命名が必要な場合のように、最初のオブジェクトを別の方法で呼び出すことができます。