Pregunta

Una pregunta que me ha estado dando vueltas durante el último tiempo.Soy principalmente un desarrollador .net que incursiona en Objective-C para iPhone y Mac.

¿Cómo se envían "conjuntos de datos" entre métodos en Objective-C?Por ejemplo, en C# puede completar una clase personalizada con datos y pasarlos en una Lista de clases personalizadas de tipo.Por ejemplo, si tuvieras una clase de cliente, simplemente harías algo como:

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

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

¿Fue útil?

Solución

Estás en el camino correcto.

Las clases de colección de Cocoa, que tienen variantes mutables e inmutables, son:

  • NSArray:ordenado, puede contener un objeto varias veces
  • NSDiccionario:desordenado, mapeo de claves a valores, las claves se copian
  • NSConjunto:desordenado, puede contener un objeto sólo una vez
  • NSCountedSet:desordenado, 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 clases que tienen variantes mutables es copiar en lugar de retener.Esto está codificado en el @property mecanismo, utilizando el copy atributo 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 copiará, y si la pasa a otra cosa, se copiará nuevamente.Sin embargo, el truco es que "copiar" un objeto inmutable en realidad solo lo retiene, por lo que solo recibes un impacto por esa primera copia.Probablemente desear hacer una copia esa primera vez de todos modos para no pasar una matriz mutable a otra cosa, luego mutarla detrás de lo que sea que se la haya pasado.

Para Cocoa en Mac OS X, también te recomiendo encarecidamente que eches un vistazo a Core Data.Es una alternativa al patrón de "conjunto de datos" al que quizás esté acostumbrado desde .NET/ADO/etc.Con Core Data, no "obtienes todos los clientes" y luego pasas esa colección.En lugar de eso, consulta por los clientes que le interesan y, a medida que recorre las relaciones de los objetos que ha consultado, se incorporarán otros objetos automáticamente.

Core Data también le ofrece funciones como modelado visual de sus entidades, generación automática de captadores y definidores de propiedades, control detallado sobre la migración de una versión de esquema a otra, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top