我正在查看CocoaHTTPServer project的源代码,更具体地说是HTTPServer.m
文件,我只是不明白这一行:
connectionClass = [HTTPConnection self];
这是做什么的(它在任何地方记录)?它甚至如何编译?它应该不是
connectionClass = [HTTPConnection class];
答案 0 :(得分:3)
在此上下文中,- (id)self
是NSObject
上定义的方法。它返回接收器。对于Class
,它显然应与调用-(Class)class
相同。
因此,类对象是完整的对象,可以动态地键入,接收消息,并从其他类继承方法。它们之所以特别,只是因为它们是由编译器创建的。
答案 1 :(得分: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
答案 2 :(得分:2)
[className self];
与[className class];
相同
返回类对象
例如:
id object = [getSystemEventsAppDelegate self];
id object1 = [getSystemEventsAppDelegate class];
答案 3 :(得分:-2)
在一个非常简单的基础上self
是对当前对象的引用,您将其作为变量传递给(在本例中)HTTPConnection,然后将该方法的结果分配给变量。
因此,如果您查看HTTPConnection,您将能够看到它如何使用该对象引用以及它将返回的内容。