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.
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. –