CocoaHTTPServerプロジェクトのソースコード、より具体的にはHTTPServer.m
ファイルを調べていますが、この行がわかりません。
connectionClass = [HTTPConnection self];
これは何をしますか(どこかに文書化されていますか)?どのようにコンパイルするのですか?すべきではない
connectionClass = [HTTPConnection class];
CocoaHTTPServerプロジェクトのソースコード、より具体的にはHTTPServer.m
ファイルを調べていますが、この行がわかりません。
connectionClass = [HTTPConnection self];
これは何をしますか(どこかに文書化されていますか)?どのようにコンパイルするのですか?すべきではない
connectionClass = [HTTPConnection class];
このコンテキストで- (id)self
は、はで定義されたメソッドNSObject
です。受信機を返します。の場合、Class
それは明らかに。への呼び出しと同じことを行う必要があり-(Class)class
ます。
したがって、クラスオブジェクトは、動的に型付けしたり、メッセージを受信したり、他のクラスからメソッドを継承したりできる本格的なオブジェクトです。それらは、コンパイラーによって作成されるという点でのみ特別です。
[Classname self]
はオブジェクトと等しく[Classname class]
、オブジェクトへの参照を返しclass
ます。
小さなサンプルコードはこれを示しています:
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
NSLog(@"Output 1: %@ address:%x",[NSString self], [NSString self]);
NSLog(@"Output 2: %@ address:%x",[NSString class], [NSString class]);
[p release];
}
出力:
2012-02-22 15:36:13.427 Untitled[1218:707] Output 1: NSString address:7b306a08
2012-02-22 15:36:13.428 Untitled[1218:707] Output 2: NSString address:7b306a08
[className self];
クラスオブジェクトを[className class];
返します。
例えば:
id object = [getSystemEventsAppDelegate self];
id object1 = [getSystemEventsAppDelegate class];
非常に基本的な簡単なself
説明では、現在のオブジェクトへの参照です。これを変数として(この場合は)HTTPConnectionに渡し、そのメソッドの結果を変数に割り当てます。
したがって、HTTPConnectionを見ると、そのオブジェクト参照がどのように使用され、何が返されるかがわかります。