Q:

Objective-C: What does [ClassName self]; do?

I'm looking through the source code for the CocoaHTTPServer project, more specifically the HTTPServer.m file and I just don't understand this line:
connectionClass = [HTTPConnection self];

What does this do (is it documented anywhere)? How does it even compile? Should it not be 
connectionClass = [HTTPConnection class];

A:

In this context, - (id)self is a method defined on NSObject. It returns the receiver. For a Class it should obviously do the same as a call to the -(Class)class.

Class objects are thus full-fledged objects that can be dynamically typed, receive messages, and inherit methods from other classes. They’re special only in that they’re created by the compiler.

A:

[Classname self] is equal to [Classname class] and returns a reference to the class object.
A little sample code illustrates this:
#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];

}
Output:
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

