Frage

Eine Frage, die mich schon seit einiger Zeit beschäftigt.Ich bin hauptsächlich ein .net-Entwickler, der sich mit Objective-C für iPhone und Mac beschäftigt.

Wie gehen Sie beim Senden von „Datensätzen“ zwischen Methoden in Objective-C vor?In C# können Sie beispielsweise eine benutzerdefinierte Klasse mit Daten füllen und diese in einer Liste vom Typ einer benutzerdefinierten Klasse weitergeben.Wenn Sie beispielsweise eine Kundenklasse hätten, würden Sie einfach so etwas tun:

List<Customer> customers = DataLayer.GetAllCustomers();

Die einzige Möglichkeit, die ich mir in obj-c vorstellen kann, wäre, ein NSArray mit benutzerdefinierten Objekten zu füllen.Ist das eine effiziente Art, Dinge zu erledigen?Irgendwelche anderen Empfehlungen?Ich verwende SQLite als Datenbank/Daten, die ich zurückgeben möchte.

War es hilfreich?

Lösung

Du bist auf dem richtigen Weg.

Die Sammlungsklassen von Cocoa – die alle veränderliche 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
  • NSCountedSet:ungeordnet, kann ein Objekt mehrfach enthalten

Die unveränderlichen Varianten tragen wesentlich zur Effizienz bei.Das Standardmuster für Zugriffsmethoden für Klassen mit veränderlichen Varianten ist das Kopieren statt das Beibehalten.Dies ist im kodifiziert @property Mechanismus, durch die Verwendung der copy Attribut auf der Eigenschaft:

// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end

Das heißt, wenn Sie ein veränderliches 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 besteht jedoch darin, dass das „Kopieren“ eines unveränderlichen Objekts es eigentlich nur behält, sodass Sie nur für die erste Kopie einen Treffer erleiden.Du hast wahrscheinlich wollen Erstellen Sie beim ersten Mal auf jeden Fall eine Kopie, damit Sie ein veränderbares Array nicht an etwas anderes übergeben, und mutieren Sie es dann hinter dem, an das Sie es übergeben haben.

Für Cocoa unter Mac OS X empfehle ich Ihnen auch dringend, einen Blick auf Core Data zu werfen.Es handelt sich um eine Alternative zum „Datensatz“-Muster, das Sie möglicherweise von .NET/ADO/etc. gewohnt sind.Mit Core Data müssen Sie nicht „alle Kunden gewinnen“ und diese Sammlung dann weitergeben.Stattdessen fragen Sie nach den Kunden, die Ihnen am Herzen liegen, und während Sie die Beziehungen der von Ihnen abgefragten Objekte durchlaufen, werden automatisch andere Objekte für Sie herangezogen.

Core Data bietet Ihnen außerdem Funktionen wie die visuelle Modellierung Ihrer Entitäten, die automatische Generierung von Eigenschafts-Gettern und -Settern, eine differenzierte Kontrolle über die Migration von einer Schemaversion zu einer anderen und so weiter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top