isKindOfClass y NSStringFromClass no están de acuerdo sobre UIApplicationDelegate

Estaba jugando con una simple prueba OCUnit para una aplicación de iPhone, y solo quería afirmar que el delegado de la aplicación era una instancia de la clase que esperaba que fuera. No esperaba que esta prueba fuera muy útil, pero resultó revelar un malentendido que tengo con respecto al Objetivo C.

Primero obtengo una referencia al delegado. Luego registro el nombre de la clase de lo que vuelve. En mi caso, la salida dice correctamente "el nombre de la clase del delegado de la aplicación es CalculatorAppDelegate".

Sin embargo, la afirmación en la siguiente línea falla, y no entiendo por qué.

- (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");
}

¿Qué circunstancias podrían hacer que NSStringFromClass () devuelva el nombre de clase correcto, mientras que isKindOfClass devuelve falso?

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).

Respuestas a la pregunta(2)

Su respuesta a la pregunta