Цель-C: Что делает [ClassName self];делать? - PullRequest
10 голосов
/ 22 февраля 2012

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

connectionClass = [HTTPConnection self];

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

connectionClass = [HTTPConnection class];

Ответы [ 4 ]

3 голосов
/ 22 февраля 2012

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

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

3 голосов
/ 22 февраля 2012

[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
2 голосов
/ 22 февраля 2012

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

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

enter image description here

0 голосов
/ 22 февраля 2012

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

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

...