É seguro usar isKindOfClass: contra uma instância NSString para determinar o tipo?

DeisKindOfClass: documentação do método no NSObject:

Tenha cuidado ao usar esse método em objetos representados por um cluster de classe. Devido à natureza dos clusters de classes, o objeto que você recebe nem sempre pode ser do tipo esperado.

A documentação então prossegue para dar um exemplo de por que você nunca deve perguntar algo como o seguinte de uma instância NSArray:

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

Agora, para dar um exemplo de uso diferente, digamos que eu tenha uma instância de NSObject onde gostaria de determinar se eu tenho um NSString ou NSArray.

Ambos os tipos são agrupamentos de classes - mas parece na documentação acima que o perigo está na resposta a isKindOfClass: ser muito afirmativo (responder SIM às vezes quando você realmente não tem um array mutável) enquanto faz uma pergunta sobre associação simples em um cluster ainda seria válido.

Um exemplo:

NSObject *originalValue;

// originalValue gets set to some instance

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

Esta suposição é correta? É realmente seguro usar isKindOfClass: contra instâncias de cluster de classe para determinar a associação? Estou especificamente interessado na resposta para o onipresente NSString, NSArray e NSDictionary, mas gostaria de saber se é generalizável.

questionAnswers(4)

yourAnswerToTheQuestion