2009-04-20 14 views
8

Esta es una pregunta para principiantes, pero, ¿la API de iPhone proporciona estructuras de datos para trabajar (es decir, lista vinculada, hash map, etc.)?Desarrollo de iPhone: ¿Qué tipo de estructuras de datos están disponibles?

+0

Tenga en cuenta que 'NS (Mutable) Array' no necesariamente almacena punteros de objeto en una matriz de estilo C. Cambia dinámicamente su representación interna entre una matriz de estilo C, una lista vinculada y cualquier otra cantidad de estructuras según cómo la utilice. –

Respuesta

18

Puede usar cualquier estructura de datos implementada en C o C++ con iPhone SDK.

Por ejemplo, uso standard library mucho.

Además de eso, también se puede utilizar estructuras de datos complejas de cacao disponible como:

  1. NSArray
  2. NSDictionary (hash)
  3. NSSet (juego)

Puede tener un compañero documento en ellos here.

+13

Aspectos técnicos: Objective-C en sí mismo no proporciona estas clases; son parte de * Cocoa *. Objective-C es solo el lenguaje que se usa. No es un gran problema, pero es una buena idea adquirir el hábito de referirse a estas cosas correctamente. ;) – hbw

+1

De acuerdo. Voy a cambiar mi respuesta para reflejar lo que dices. ¡Gracias! –

-4

El lenguaje Objective-C no proporciona ninguna estructura de datos inherente como listas enlazadas, etc. Sin embargo, como está basado en la base de código C/C++, todo lo que se puede implementar en C o C++ se puede hacer directamente en Objective-C, incluidas las listas vinculadas y otras estructuras de datos.

+3

Objective-C de ninguna manera "se basa en la base de código de C++". C, sí, pero cualquier cosa C++ que tengas que salir de tu camino para usar (y ser un poco masoquista) –

12

cacao (un marco disponible tanto en Mac y iOS) implementa several common collection types, incluyendo NSArray, NSDictionary y NSSet, así como sus variantes mutables. (Leopard también introdujo NSPointerArray, NSHashMap y NSHashTable, una matriz/diccionario/conjunto con opciones adicionales (como el uso de referencias débiles) que las hace más convenientes para usar en un entorno de recolección de basura. Sin embargo, estas clases no están disponibles actualmente en iPhone, y tendría poco sentido en este momento, ya que iOS no es compatible con la recolección de basura.) Estas clases son extremadamente rápidas, y son adecuadas para uso general en cualquier aplicación Cocoa.

Más allá de estas estructuras proporcionadas, tiene varias opciones: (1) crear estructuras más complejas usando estos como bloques de construcción, (2) aprovechar el código de terceros existente o (3) construir sus propias estructuras de datos desde cero.

Una opción es CHDataStructures.framework, un marco de código abierto Objective-C que yo mantengo. Implementa varias otras estructuras de datos comunes, como stack/queue/deque, listas enlazadas, conjuntos ordenados y más. Estas estructuras adoptan NSCoding y NSCopying (más NSFastEnumeration en 10.5+), por lo que funcionan a la perfección con el código nativo Objective-C. El proyecto le permite construir una biblioteca estática para usar también en iPhone. Como este marco es de código abierto, incluso puede incluir solo el código relevante directamente en su proyecto si es necesario.

Mientras que puede usar estructuras C++ y STL, he encontrado que mezclar Objective-C y C++ tiende a ser mucho más confuso y conduce a molestos errores, especialmente para principiantes. Esto no es una pelea contra C++, solo un principio de "cuando en Roma". Cuando se utiliza C++, STL es, por supuesto, el enfoque preferido. Si ya estás mezclando en C++, probablemente estés lo suficientemente cómodo con eso que STL podría ser una buena opción; Aun así, creo que el uso de colecciones de cacao nativas produce un código más evidente y más evidente.

+3

Sería bueno si aquellos que sienten la necesidad de votar negativamente dejan algún comentario sobre * por qué * sienten que una respuesta es "no es útil" ... –

+1

No creo que NSHashMap, NSHashTable o NSPointerArray estén disponibles en el iPhone. –

+1

Carl tiene razón, y como no encontré esta información en otro lugar en SO, quiero expresarlo claramente: NSHashMap, NSHashTable y NSPointerArray no están disponibles en el SDK de iPhone. Consulte esta pregunta para obtener una descripción de cómo usar NSValue para punteros de casilla: http://stackoverflow.com/questions/393662/does-using-lists-of-structs-make-sense-in-cocoa – Felixyz

Cuestiones relacionadas