title: Is [self class] special in Objective-C
body: <p>I ran across some code today that does the following:</p>
  
  <pre><code>- (instancetype)initWithBlah:(Blah)blah {
    NSLog(@"Initialising instance of %@", [self class]);
  
    if ((self = [super init]) != nil) {
      // blargh
    }
    return self;
  }
  </code></pre>
  
  <p>Now, this seems weird because self is used in <code>[self class]</code> before it's actually set a few lines later, but never seems to crash here and the compiler doesn't squawk, and it actually works.</p>
  
  <p>Is <code>[self class]</code> treated specially by the objc compiler and just statically evaluates to the Class object?</p>