Ich habe eine Klasse A
mit einer Eigenschaft NSString *name
. Wenn ein NSArray
vorhanden ist und viele A
-Objekte in dieses Array eingefügt werden, ist das Gießen jedes Mal erforderlich, wenn ich ein Objekt abrufe? d. h.
Oder gibt es eine andere Möglichkeit, es in Java zu machen, wo du ArrayList<A> arr
hast?
NSArray
speichert keine Informationen über die darin enthaltenen Objekttypen. Wenn Sie die Objekttypen in Ihrem Array sicher kennen, können Sie eine Umwandlung entweder implizit oder explizit durchführen:
Es gibt keinen Unterschied in den Laufzeitkosten zwischen impliziten und expliziten Umwandlungen, es ist nur eine Frage des Stils. Wenn Sie den Typ falsch erhalten, dann ist es sehr wahrscheinlich, dass Sie die gefürchtete unrecognized selector sent to instance 0x12345678
-Ausnahme bekommen.
Wenn Sie ein heterogenes Array verschiedener Objekttypen haben, müssen Sie das isKindOfClass:
Methode zum Testen der Klasse des Objekts:
NSArray
s objectAtIndex:
gibt eine Variable vom Typ id
zurück. Dies entspricht in etwa der Rückgabe eines Object
in Java - "wir können nicht viel über den Typ dieser Variablen garantieren." In Objective-C können Sie jedoch Nachrichten an id
Variablen senden, ohne dass sich der Compiler beschweren muss. Da Sie wissen, dass das Array nur A
Instanzen enthält, senden Sie ihm die Nachricht name
. Zum Beispiel wird Folgendes ohne Warnung kompiliert:
Wenn Sie jedoch die Punktnotation verwenden möchten (z. B. [array objectAtIndex:0].name
), müssen Sie id
wie hier gezeigt in A *
umwandeln:
das ist der Weg:
%Vor%Sie müssen sich keine Sorgen über den proprety-Typ machen
Tags und Links objective-c iphone ios