10

我正在查看CocoaHTTPServer 项目的源代码,更具体地说是HTTPServer.m文件,我只是不明白这一行:

connectionClass = [HTTPConnection self];

这是做什么的(在任何地方都有记录)?它甚至是如何编译的?不应该

connectionClass = [HTTPConnection class];
4

4 回答 4

3

在这种情况下,- (id)self是在 上定义的方法NSObject。它返回接收器。对于 aClass它显然应该与调用-(Class)class.

因此,类对象是成熟的对象,可以动态键入、接收消息并从其他类继承方法。它们的特殊之处仅在于它们是由编译器创建的。

于 2012-02-22T14:36:15.160 回答
3

[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
于 2012-02-22T14:39:17.767 回答
2

[className self];[className class];
返回类对象相同。
例如:

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

在此处输入图像描述

于 2012-02-22T14:47:28.527 回答
-2

简而言之self,是对当前对象的引用,您将其作为变量传递给(在这种情况下)HTTPConnection,然后将该方法的结果分配给该变量。

因此,如果您查看 HTTPConnection,您将能够看到它如何使用该对象引用以及它将返回什么。

于 2012-02-22T14:35:58.470 回答