NSArray von Objekten und Casting

8

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.

%Vor%

Oder gibt es eine andere Möglichkeit, es in Java zu machen, wo du ArrayList<A> arr hast?

    
bubbles 02.09.2011, 23:51
quelle

4 Antworten

20

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:

%Vor%

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:

%Vor%     
Adam Rosenfield 03.09.2011, 00:18
quelle
11

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:

%Vor%

Wenn Sie jedoch die Punktnotation verwenden möchten (z. B. [array objectAtIndex:0].name ), müssen Sie id wie hier gezeigt in A * umwandeln:

%Vor%     
Chris Doble 03.09.2011 00:14
quelle
1

So geht es. Sie können die obige Operation tatsächlich ausführen, ohne die Rückgabe auszugeben, da Sie sie ohnehin in einem NSString lesen.

    
Sid 03.09.2011 00:01
quelle
-2

das ist der Weg:

%Vor%

Sie müssen sich keine Sorgen über den proprety-Typ machen

    
MUH Mobile Inc. 03.09.2011 00:08
quelle

Tags und Links