Безопасно ли использовать isKindOfClass: против экземпляра NSString для определения типа?

ОтisKindOfClass: документация по методу в NSObject:

Be careful when using this method on objects represented by a class cluster. Because of the nature of class clusters, the object you get back may not always be the type you expected.

Затем документация приводит пример того, почему вы никогда не должны спрашивать что-то вроде следующего экземпляра NSArray:

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

Теперь, чтобы привести пример другого использования, скажем, у меня есть экземпляр NSObject, где я хотел бы определить, есть ли у меня NSString или NSArray.

Оба эти типа являются кластерами классов - но из документации выше видно, что опасность заключается в ответе на isKindOfClass: слишком утвердительно (отвечая ДА, когда у вас действительно нет изменяемого массива), тогда как задается вопрос о простом членстве в кластер все еще будет действительным.

Пример:

NSObject *originalValue;

// originalValue gets set to some instance

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

Это предположение верно? Действительно ли безопасно использовать isKindOfClass: против экземпляров кластера классов для определения членства? Меня особенно интересует ответ для вездесущих NSString, NSArray и NSDictionary, но мне было бы интересно узнать, можно ли его обобщить.

Ответы на вопрос(4)

Ваш ответ на вопрос