Datenmengen weitergeben

8

Eine Frage, die mich in letzter Zeit beschäftigt hat. Ich bin hauptsächlich ein .net-Entwickler, der in Objective-C für iPhone und Mac plant.

Wie gehen Sie beim Senden von "Datasets" zwischen Methoden in objective-c vor? In C # können Sie z. B. eine benutzerdefinierte Klasse mit Daten füllen und sie in einer benutzerdefinierten Liste des Typs "Typ" weitergeben. ZB wenn du eine Kundenklasse hättest, würdest du einfach so etwas tun wie:

%Vor%

Der einzige Weg, wie ich sehen kann, wie dies in obj-c gemacht werden könnte, wäre ein NSArray mit benutzerdefinierten Objekten zu füllen? Ist das ein effizienter Weg, Dinge zu tun? Irgendwelche anderen Empfehlungen? Ich benutze sqlite als die Datenbank / Daten, die ich zurückgeben möchte.

    
JamesSugrue 27.08.2008, 20:45
quelle

1 Antwort

24

Sie sind auf dem richtigen Weg.

Cocoa's Collection-Klassen - die alle änderbare und unveränderliche Varianten haben - sind:

  • NSArray: geordnet, kann ein Objekt mehrfach enthalten
  • NSDictionary: ungeordnet, Zuordnung von Schlüsseln zu Werten, Schlüssel werden kopiert
  • NSSet: ungeordnet, kann ein Objekt nur einmal enthalten
  • NSCongeredSet: ungeordnet, kann ein Objekt mehrfach enthalten

Die unveränderlichen Varianten helfen sehr bei der Effizienz. Das Standardmuster für Accessoren von Klassen, die veränderbare Varianten haben, besteht darin, sie zu kopieren anstatt zu behalten. Dies wird im @property -Mechanismus codiert, indem das Attribut copy für die Eigenschaft verwendet wird:

%Vor%

Das bedeutet, dass wenn Sie ein veränderbares Array an etwas übergeben, das ein Array annimmt, wird es kopiert, und wenn Sie es an etwas anderes übergeben, wird es erneut kopiert. Der Trick ist jedoch, dass das "Kopieren" eines unveränderlichen Objekts es wirklich nur behält, so dass Sie nur einen Treffer für diese erste Kopie machen. Sie möchten wahrscheinlich auf jeden Fall eine Kopie erstellen, damit Sie ein veränderbares Array nicht an etwas anderes übergeben, und dann hinter dem, was Sie ihm übergeben haben, mutieren.

Für Cocoa unter Mac OS X empfehle ich Ihnen dringend, sich Core Data anzusehen. Es ist eine Alternative zu dem "Data Set" -Muster, das Sie von .NET / ADO / etc gewohnt sind. Mit Core Data erhalten Sie nicht "alle Kunden" und geben diese dann weiter. Stattdessen fragen Sie nach den Kunden, die Ihnen wichtig sind, und wenn Sie die Beziehungen der Objekte durchlaufen, nach denen Sie gesucht haben, werden andere Objekte automatisch für Sie eingezogen.

Core Data bietet Ihnen auch Funktionen wie visuelle Modellierung Ihrer Entitäten, automatische Generierung von Property Getter & Amp; Setter, fein abgestimmte Kontrolle über die Migration von einer Schema-Version zu einer anderen, und so weiter.

    
Chris Hanson 27.08.2008, 21:03
quelle

Tags und Links