我正在查看CocoaHTTPServer 项目的源代码,更具体地说是HTTPServer.m
文件,我只是不明白这一行:
connectionClass = [HTTPConnection self];
这是做什么的(在任何地方都有记录)?它甚至是如何编译的?不应该
connectionClass = [HTTPConnection class];
我正在查看CocoaHTTPServer 项目的源代码,更具体地说是HTTPServer.m
文件,我只是不明白这一行:
connectionClass = [HTTPConnection self];
这是做什么的(在任何地方都有记录)?它甚至是如何编译的?不应该
connectionClass = [HTTPConnection class];
在这种情况下,- (id)self
是在 上定义的方法NSObject
。它返回接收器。对于 aClass
它显然应该与调用-(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,您将能够看到它如何使用该对象引用以及它将返回什么。