Objective-C: What does [ClassName self]; do?
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.
[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