2008-08-27 14 views
8

Una pregunta que me ha ponderado por última vez. Principalmente soy un desarrollador de .net que incursiona en Objective-C para iPhone y Mac.Pasar por los conjuntos de datos

¿Cómo se hace para enviar "conjuntos de datos" entre métodos en Object-C. Por ejemplo, en C# puede completar una clase personalizada con datos y pasarla en una Lista de tipo de clase personalizada. Por ejemplo, si usted tenía una clase de cliente que acaba de hacer algo como:

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

La única manera que puedo ver cómo esto podría hacerse en obj-c sería para rellenar una NSArray con objetos personalizados? ¿Es esta una manera eficiente de hacer las cosas? ¿Alguna otra recomendación? Estoy usando sqlite como la base de datos/datos que quiero devolver.

+0

También es posible que desee buscar contenedores livianos alrededor de SQLLite para crear los objetos más fácilmente desde su base de datos. –

Respuesta

24

Estás en el camino correcto.

clases de colección de Cacao - todos los cuales tienen mutables un inmutables variantes - son:

  • NSArray: ordenado, puede contener un objeto varias veces
  • NSDictionary: desordenadas, mapeo de teclas a los valores, las claves se copian
  • NSSet: desordenada, puede contener un objeto sólo una vez
  • NSCountedSet: desordenada, puede contener un objeto varias veces

Las variantes inmutables ayudan mucho con la eficiencia. El patrón estándar para los descriptores de acceso de las clases que tienen variantes mutables es copiar en lugar de retener. Esto está codificado en el mecanismo @property, mediante el atributo copy en la propiedad:

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

Esto significa que si pasa una matriz mutable a algo que toma una matriz, se puede copiar, y si pasa ese a otra cosa, se copiará de nuevo. El truco es que "copiar" un objeto inmutable simplemente lo retiene, por lo que solo recibes un golpe por esa primera copia. Probablemente desee para hacer una copia la primera vez de todos modos para que no pase una matriz mutable a otra cosa, luego mutezca detrás de lo que le pasó.

Para Cocoa en Mac OS X, también le recomiendo encarecidamente que eche un vistazo a Core Data. Es una alternativa al patrón de "conjunto de datos" al que puede estar acostumbrado desde .NET/ADO/etc. Con Core Data, no "obtiene todos los clientes" y luego pasa esa colección. En su lugar, consulta los clientes que le interesan y, a medida que recorre las relaciones de los objetos que ha consultado, otros objetos se incluirán automáticamente.

Core Data también le ofrece características como modelado visual de sus entidades, generación automática de captadores de propiedades &, control detallado de la migración de una versión de esquema a otra, y así sucesivamente.

Cuestiones relacionadas