2010-07-28 8 views
12

Fragen Sie sich nur, ob es in Objective-C eine Entsprechung zu Java's ArrayList gibt?Objective C entspricht Java's ArrayList

Oder etwas, das verwendet werden kann, um Objekte/Daten zu speichern, die keine festgelegte Größe haben.

Danke.

Antwort

17

Wie andere darauf hingewiesen haben, sind NSArray/NSMutableArray was Sie suchen.

Wenn Sie aus der Java-Welt kommen, werden Sie feststellen, dass Cocoa's Kollektionsangebote ziemlich dürftig sind. Tatsächlich ist die Funktionalität ziemlich umfangreich. Die NSArray, NSDictionary und sind tatsächlich class clusters, was bedeutet, dass die öffentliche API eine "abstrakte" Klasse ist. Wenn Sie eine der Sammlungen initialisieren, erhalten Sie in Wirklichkeit eine konkrete Implementierung, die auf die von Ihnen bereitgestellten Daten zugeschnitten ist. Diese Implementierungen können auch die konkrete Implementierung zur Laufzeit ändern, wenn sich die Daten ändern (z. B. nimmt ihre Größe zu). Dies ist alles möglich aufgrund der viel dynamischeren Laufzeit von Objective-C als es die statische Typisierung (und Sicherheit) von Java erlaubt. Die Klassenclusterstrategie verbirgt somit viele der Implementierungen von z.B. die java.util.List Schnittstelle, hinter einer einzigen API.

Die Cocoa-Frameworks sind in Verbunddatenstrukturen etwas eingeschränkt (d. H. Solche, die auf "primitiven" Arrays, Mengen und Wörterbüchern basieren). Sie können feststellen, dass die ausgezeichnete, Open Source CHDataStructures viele Lücken füllt.

+0

Ich suche nach dem gleichen Ding wie Julio und sehe viele Antworten, die sagen "Schließe einfach deine Augen und benutze NS \ * Array ...". Aber oft möchten Sie explizit eine verknüpfte Liste verwenden, z. zum konstanten Einfügen/Löschen von Elementen (NS \ * Array garantiert dies nicht). Die Auswahl der richtigen Datenstruktur basierend auf Ihrem bekannten Zugriffsmuster ist grundlegend für die Performance. Als Neuling in der iOS-Entwicklung verstehe ich nicht, warum Cocoa diese Entscheidung vom Programmierer zu nehmen scheint? –

Verwandte Themen