isKindOfClass e NSStringFromClass discordam sobre UIApplicationDelegate

Eu estava jogando com um teste simples do OCUnit para um aplicativo para iPhone e só queria afirmar que o delegado do aplicativo era uma instância da classe que eu esperava que fosse. Eu não esperava que esse teste fosse muito útil, mas acabou revelando um mal-entendido que tenho sobre o objetivo C.

Primeiro recebo uma referência para o delegado. Então, registro o nome da classe do que volta. No meu caso, a saída diz corretamente "o nome da classe do delegado do aplicativo é CalculatorAppDelegate".

No entanto, a afirmação na próxima linha falha e eu não entendo o porqu

- (void)testAppDelegate 
{
    id appDelegate = [[UIApplication sharedApplication] delegate];
    NSLog(@"app delegate's class name is %@", NSStringFromClass([appDelegate class]));
    NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);
    NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);
    NSLog(@"class == class %i", [appDelegate class] == [CalculatorAppDelegate class]);
    STAssertTrue([appDelegate isKindOfClass:[CalculatorAppDelegate class]], @"wtf");
}

Quais circunstâncias podem fazer com que NSStringFromClass () retorne o nome correto da classe, enquanto isKindOfClass retorna false?

2011-03-19 15:51:13.864 Calculator[40092:207] app delegate's class name is CalculatorAppDelegate
2011-03-19 15:51:13.864 Calculator[40092:207] is it kind? 0
2011-03-19 15:51:13.865 Calculator[40092:207] is it member? 0
2011-03-19 15:51:13.865 Calculator[40092:207] class == class 0
/Users/pohl/Developer/FoundationCalculator/CalculatorTests/CalculatorBrainTests.m:37: error: -[CalculatorBrainTests testAppDelegate] : "[appDelegate isKindOfClass:[CalculatorAppDelegate class]]" should be true. wtf
Test Case '-[CalculatorBrainTests testAppDelegate]' failed (0.002 seconds).

questionAnswers(2)

yourAnswerToTheQuestion