Ist es sicher, isKindOfClass: gegen eine NSString-Instanz zu verwenden, um den Typ zu bestimmen?

Von demisKindOfClass: Methodendokumentation in NSObject:

Seien Sie vorsichtig, wenn Sie diese Methode für Objekte verwenden, die von einem Klassencluster dargestellt werden. Aufgrund der Art der Klassencluster entspricht das zurückgegebene Objekt möglicherweise nicht immer dem erwarteten Typ.

In der Dokumentation finden Sie ein Beispiel dafür, warum Sie niemals Folgendes von einer NSArray-Instanz verlangen sollten:

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

Angenommen, ich habe eine Instanz von NSObject, in der ich feststellen möchte, ob ich einen NSString oder ein NSArray habe.

Bei beiden Typen handelt es sich um Klassencluster. Aus der obigen Dokumentation geht jedoch hervor, dass die Gefahr in der Antwort auf isKindOfClass besteht: zu positiv sein (manchmal mit JA antworten, wenn Sie wirklich kein veränderbares Array haben), während eine Frage zur einfachen Mitgliedschaft in gestellt wird Ein Cluster ist weiterhin gültig.

Ein Beispiel:

NSObject *originalValue;

// originalValue gets set to some instance

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

Ist diese Annahme richtig? Ist es wirklich sicher, isKindOfClass: gegen Klassenclusterinstanzen zu verwenden, um die Mitgliedschaft zu bestimmen? Ich bin speziell an der Antwort für das allgegenwärtige NSString, NSArray und NSDictionary interessiert, aber ich würde gerne wissen, ob es verallgemeinerbar ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage