Question

Une question qui me préoccupe depuis un moment.Je suis avant tout un développeur .net qui s'essaye à Objective-C pour iPhone et Mac.

Comment procédez-vous pour envoyer des "ensembles de données" entre les méthodes dans objective-c.Par exemple, en C#, vous pouvez remplir une classe personnalisée avec des données et les transmettre dans une liste de classe personnalisée de type.Par exemple, si vous aviez une classe de clients, vous feriez simplement quelque chose comme :

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

La seule façon de voir comment cela pourrait être fait en obj-c serait de remplir un NSArray avec des objets personnalisés ?Est-ce une façon efficace de faire les choses ?D'autres recommandations ?J'utilise SQLite comme base de données/données que je souhaite renvoyer.

Était-ce utile?

La solution

Vous êtes sur la bonne voie.

Les classes de collection de Cocoa, qui ont toutes des variantes mutables et immuables, sont :

  • NSArray :ordonné, peut contenir un objet plusieurs fois
  • NSDictionnaire :non ordonné, mappage des clés aux valeurs, les clés sont copiées
  • NSSet :non ordonné, ne peut contenir un objet qu'une seule fois
  • NSCountedSet :non ordonné, peut contenir un objet plusieurs fois

Les variantes immuables aident beaucoup en termes d'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 @property mécanisme, en utilisant le copy attribut sur la propriété :

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

Cela signifie que si vous transmettez un tableau mutable à quelque chose qui prend un tableau, il sera copié, et si vous le transmettez à autre chose, il sera à nouveau copié.L'astuce est cependant que "copier" un objet immuable le conserve en réalité, vous ne prenez donc un coup que pour cette première copie.Vous probablement vouloir faire une copie cette première fois de toute façon afin de ne pas transmettre un tableau mutable à quelque chose d'autre, puis le muter derrière tout ce à quoi vous l'avez transmis.

Pour Cocoa sur Mac OS X, je vous encourage également fortement à jeter un œil à 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 pour ensuite transmettre cette collection.Au lieu de cela, vous recherchez les clients qui vous intéressent et, à mesure que vous parcourez les relations entre les objets que vous avez interrogés, d'autres objets seront automatiquement extraits pour vous.

Core Data vous offre également des fonctionnalités telles que la modélisation visuelle de vos entités, la génération automatique de getters et setters de propriétés, un contrôle précis sur la migration d'une version de schéma à une autre, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top