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

Objective c 目标C:什么是[ClassName self];做,objective-c,class,class-method,httpserver,Objective C,Class,Class Method,Httpserver,我正在查看源代码,更具体地说是HTTPServer.m文件,但我不理解这一行: connectionClass = [HTTPConnection self]; 这是做什么的(在任何地方都有记录)?它是如何编译的?难道不是吗 connectionClass = [HTTPConnection class]; 简而言之,self是对当前对象的引用,您将其作为变量传递给(在本例中)HTTPConnection,然后将该方法的结果分配给该变量 因此,如果您查看HTTPConnection,您将能够

我正在查看源代码,更具体地说是
HTTPServer.m
文件,但我不理解这一行:

connectionClass = [HTTPConnection self];
这是做什么的(在任何地方都有记录)?它是如何编译的?难道不是吗

connectionClass = [HTTPConnection class];

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

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

在此上下文中,
-(id)self
是在
NSObject
上定义的方法。它返回接收器。对于
来说,它显然应该与调用
-(Class)类
一样

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


[Classname self]
等于
[Classname 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];

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

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

你在说什么
HTTPConnection
不是一个方法,即使它是,也不是在消息中传递参数的正确语法。我想我很困惑,因为NSObject协议中声明的self方法是一个实例方法,而不是类方法-(id)self。这是因为类本身是一个可以接收自我信息的客观c对象吗?当然是这样。当您声明一个类方法时,实际上是在向该类添加一个实例方法。请注意,您可以重写子类中的类方法。请看,实际上很明显,对类调用的方法
self
返回类。棘手的部分是为什么调用类的方法
class
返回类而不是它的元类:)我真希望人们使用
[ClassName self]
而不是
[ClassName class]
。这将减少
+class
-class
之间的混淆。但是,唉,这是根深蒂固的point@Sulthan:更令人困惑的是,在Smalltalk中,
ClassName class
确实返回元类;)谢谢你,我发现了一篇描述类/元类的有趣帖子。相关位:Objective-C中的每个类本身就是一个对象。这意味着类结构必须以isa指针开始,以便它与objc_对象二进制兼容。当我试图回答它时,我学到了很多。那应该是
+(Class)Class
,而不是
-(Class)Class
,它做的事情完全不同
id object = [getSystemEventsAppDelegate self];
id object1 = [getSystemEventsAppDelegate class];