Цель-C: Что делает [ClassName self]; делать?

Я просматриваю исходный код проект CocoaHTTPServer, в частности файл HTTPServer.m, и я просто не понимаю эта строка:

connectionClass = [HTTPConnection self];

Что это делает (документировано где-нибудь)? Как он компилируется? Если это не будет

connectionClass = [HTTPConnection class];

Ответ 1

В этом контексте - (id)self - это метод, определенный в NSObject. Он возвращает приемник. Для a Class он должен, очевидно, делать то же самое, что и вызов -(Class)class.

Объектами класса являются, таким образом, полнофункциональные объекты, которые могут быть динамически типизированы, получать сообщения и наследовать методы из других классов. Они специально созданы только в том, что theyre создается компилятором.

Ответ 2

[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

Ответ 3

[className self]; совпадает с [className class];
Возвращает объект класса.
Например:

id object = [getSystemEventsAppDelegate self];
id object1 = [getSystemEventsAppDelegate class];  

enter image description here

Ответ 4

В самом общем тексте self есть ссылка на текущий объект, вы передаете это как переменную (в данном случае) HTTPConnection, затем присвойте результат этого метода переменной.

Итак, если вы посмотрите на HTTPConnection, вы сможете увидеть, как он использует эту ссылку на объект и что он будет возвращать.