目标C:[ClassName self]是什么;做?

时间:2012-02-22 14:31:07

标签: objective-c class class-method httpserver

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

connectionClass = [HTTPConnection self];

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

connectionClass = [HTTPConnection class];

4 个答案:

答案 0 :(得分:3)

在此上下文中,- (id)selfNSObject上定义的方法。它返回接收器。对于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];  

enter image description here

答案 3 :(得分:-2)

在一个非常简单的基础上self是对当前对象的引用,您将其作为变量传递给(在本例中)HTTPConnection,然后将该方法的结果分配给变量。

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