tos resfriado resfriada por periodo para normal hago flema estoy contagiosa contagio contagiar contagia con comun como besos beso bebe objective-c cocoa osx sqlite

objective c - resfriado - Pasar alrededor de conjuntos de datos



la tos se contagia por un beso (1)

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

¿Cómo se puede enviar "conjuntos de datos" entre los métodos en el objetivo 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 tuviera una clase de clientes, simplemente haría algo como:

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

¿La única forma en que puedo ver cómo esto podría hacerse en obj-c sería llenar un 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.


Estás en el camino correcto.

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

  • NSArray: ordenado, puede contener un objeto varias veces
  • NSDictionary: desordenado, mapeo de claves a valores, se copian claves
  • NSSet: desordenado, puede contener un objeto solo 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 las clases que tienen variantes mutables es copiar en lugar de retener. Esto está codificado en el mecanismo @property , mediante el uso del 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 copiará, y si pasa eso 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 quieras hacer una copia la primera vez de todos modos para no pasar una matriz mutable a otra cosa, luego mutarla detrás de lo que sea que la hayas pasado.

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 atraviesa las relaciones de los objetos que ha consultado, se atraerán automáticamente otros objetos.

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