¿Es seguro usar isKindOfClass: contra una instancia de NSString para determinar el tipo?

Desde elisKindOfClass: documentación del método en NSObject:

Tenga cuidado al usar este método en objetos representados por un grupo de clases. Debido a la naturaleza de los grupos de clases, es posible que el objeto que recupere no siempre sea del tipo que esperaba.

La documentación luego da un ejemplo de por qué nunca debe preguntar algo como lo siguiente de una instancia de NSArray:

// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
    // Modify the object
}

Ahora para dar un ejemplo de un uso diferente, digamos que tengo una instancia de NSObject donde me gustaría determinar si tengo una NSString o NSArray.

Ambos tipos son grupos de clases, pero de la documentación anterior se desprende que el peligro radica en la respuesta a isKindOfClass: ser demasiado afirmativo (responder SÍ a veces cuando realmente no tiene una matriz mutable) mientras que hace una pregunta acerca de la membresía simple un cluster aun seria valido

Un ejemplo:

NSObject *originalValue;

// originalValue gets set to some instance

if ( [originalValue isKindOfClass:[NSString class]] )
   // Do something with string

¿Es esta suposición correcta? ¿Es realmente seguro usar isKindOfClass: contra las instancias de clúster de clase para determinar la membresía? Estoy especialmente interesado en la respuesta a la omnipresente NSString, NSArray y NSDictionary, pero me gustaría saber si es generalizable.

Respuestas a la pregunta(4)

Su respuesta a la pregunta