2009-07-21 4 views
6

Ich bin ziemlich neu in Objective-C und fragte mich, was der beste Weg, um Sammlungen von Tupeln zu verwalten war. In C würde ich ein 2D-Array oder eine Struktur verwenden.Verwalten von Sammlungen von Tupeln in Objective-C

Sollte ich Objekte erstellen, die diese Tupel enthalten? Es scheint nur ein Overkill für das Sortieren von Listen zu sein oder gibt es keine wirkliche zusätzliche Last, die durch die Objektinitialisierung erzeugt wird?

Antwort

12

Es gibt definitiv einige Overhead in der Generierung von Objekten. Für eine kleine Anzahl von Objekten ist die Verwendung von ObjC-Datenstrukturen immer noch geeignet. Wenn Sie eine große Anzahl von Tupeln haben, würde ich sie in einem C-Array von Strukturen verwalten. Denken Sie daran, dass Objective-C wirklich nur C ist. Es ist angemessen und üblich, C-Konstrukte in Objective-C zu verwenden (bis zu einem Punkt; zu lernen, wo dieser Punkt liegt, ist ein wichtiger Meilenstein, um ein guter Objective-C-Entwickler zu werden).

Normalerweise würde ich für diese Art von Datenstruktur wahrscheinlich ein einzelnes Objective-C-Objekt erstellen, das die gesamte Sammlung verwaltet. So würden externe Anrufer eine Objective-C-Schnittstelle sehen, aber die internen Daten würden in einer effizienteren C-Struktur gespeichert werden.

Wenn es üblich ist, schnell auf viele Tupel zuzugreifen, würde mein Sammlungsobjekt wahrscheinlich ähnliche Methoden wie "[NSArray getObjects:range:]" bereitstellen. ObjC-Methoden, die mit "get" beginnen, zeigen an, dass der erste Parameter ein Zeiger ist, der von der Methode überschrieben wird. Dies wird üblicherweise für den C-ähnlichen Hochleistungszugriff auf Objekte verwendet, die von einem ObjC-Objekt verwaltet werden.

Diese Art der Datenstruktur ist genau die Art und Weise ObjC Entwickler die Eleganz und Wartbarkeit von ObjC mit der Leistung und Einfachheit von C. verschmelzen

1

Ich denke, Sie müssen sich mit einem NSArray von NSArray-Objekten oder vielleicht einem NSArray von NSDictionary-Objekten begnügen. Sie können jederzeit Ihre eigene Klasse rollen, oder es die Art und Weise tun Sie in C.

1

Es gibt ein paar verschiedene Möglichkeiten, wie Sie dagegen tun würde gehen könnte:

  1. Coredata. Obwohl es technisch keine Datenbank ist, kann es sich ähnlich wie eins verhalten. Wenn Sie zwischen den App-Ausführungen keine Persistenz benötigen, sollten Sie den Store-Typ NSInMemoryStoreType anstelle einer NSSQLiteStoreType-Option oder einer anderen Option verwenden. Wenn Sie jedoch Tupel zusammenfügen möchten, funktioniert die Verwendung von CoreData absolut nicht (dies ist IMO, ist der Hauptgrund, warum CoreData nicht eine Datenbank ist).
  2. Verwenden Sie eine echte Datenbank. SQLite wird auf jedem Mac und iPhone geliefert und ist sehr einfach zu verwenden, wenn Sie Wrapper wie FMDB oder SQLite Persistent Objects oder oder EGODatabase oder GTMSQLite wrapper by Google verwenden.
  3. Ein Tupel ist eigentlich nur eine Sammlung von Schlüssel-Wert-Paaren, also könnten Sie einfach ein NSMutableArray von NSMutableDictionaries verwenden. Sie werden natürlich nicht die SQL-Syntax und alle Joins/Queries verwenden, die Sie selbst ausführen müssen, aber das würde definitiv die einfachste Einrichtung haben.
  4. Schreiben Sie eine Tuple-Klasse und speichern Sie diese in einem NSMutableArray (ähnlich wie # 3, indem Sie nur einen gemeinsamen Satz von Attributen auf Ihren Tupeln erzwingen).
+5

Warum würden Sie eine Datenbank verwenden Tupel haben? – George