2008-08-27 10 views
8

Une question qui m'interpelle depuis un moment. Je suis avant tout un développeur .net qui évolue en Objective-C pour iPhone et Mac.Transmettre des ensembles de données

Comment allez-vous envoyer des "ensembles de données" entre les méthodes de l'objectif-c. Par exemple, en C#, vous pouvez remplir une classe personnalisée avec des données et la transmettre dans une classe personnalisée List of type. Par exemple, si vous aviez une classe à la clientèle vous suffit de faire quelque chose comme:

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

La seule façon que je peux voir comment cela pourrait se faire dans obj-c serait de remplir un NSArray avec des objets personnalisés? Est-ce un moyen efficace de faire les choses? D'autres recommandations? J'utilise sqlite comme base de données/données que je veux retourner.

+0

Vous pouvez également rechercher des wrappers légers autour de SQLLite pour créer plus facilement les objets à partir de votre base de données. –

Répondre

24

Vous êtes sur la bonne voie.

classes de collecte de cacao - qui ont tous mutables une des variantes immuables - sont:

  • NSArray: Ordonné, peut contenir un objet plusieurs fois
  • NSDictionary: désordonnées, la correspondance des clés à des valeurs, les touches sont copiées
  • NSSet: non ordonnée, peut contenir un objet qu'une seule fois
  • NSCountedSet: non ordonnée, peut contenir un objet plusieurs fois

Les variantes immuables aident beaucoup avec l'efficacité. Le modèle standard pour les accesseurs de classes qui ont des variantes mutables est de copier plutôt que de conserver. Ceci est codifié dans le mécanisme @property, en utilisant l'attribut copy sur la propriété:

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

Cela signifie que si vous passez un tableau mutable à quelque chose qui prend un tableau, il sera copié, et si vous passez que à quelque chose d'autre, il sera à nouveau copié. L'astuce est que "copier" un objet immuable le retient vraiment, donc vous ne prenez qu'un coup pour cette première copie. Vous avez probablement besoin de pour faire une copie cette première fois de toute façon afin de ne pas passer un tableau mutable à quelque chose d'autre, puis de le faire muter à l'arrière de ce que vous lui avez transmis. Pour Cocoa sur Mac OS X, je vous encourage fortement à jeter un oeil à Core Data. C'est une alternative au modèle "ensemble de données" auquel vous pourriez être habitué depuis .NET/ADO/etc. Avec Core Data, vous n'obtenez pas «tous les clients» et vous transmettez ensuite cette collection. Au lieu de cela, vous interrogez les clients qui vous intéressent et, lorsque vous traversez les relations des objets que vous avez interrogés, d'autres objets sont automatiquement extraits pour vous. Core Data vous fournit également des fonctionnalités telles que la modélisation visuelle de vos entités, la génération automatique de getters de propriété & setters, le contrôle précis de la migration d'une version de schéma vers une autre, etc.

Questions connexes