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?
Respuesta
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:
- NSArray
- NSDictionary (hash)
- NSSet (juego)
Puede tener un compañero documento en ellos here.
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
De acuerdo. Voy a cambiar mi respuesta para reflejar lo que dices. ¡Gracias! –
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.
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) –
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.
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" ... –
No creo que NSHashMap, NSHashTable o NSPointerArray estén disponibles en el iPhone. –
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
- 1. ¿Qué estructuras de datos de árbol Javascript están disponibles?
- 2. ¿Qué estructuras de ncurses están disponibles para BASH?
- 3. ¿Qué partes de .NET no están disponibles en Monotouch para el desarrollo de iPhone?
- 4. ¿Qué herramientas están disponibles para TDDD (Desarrollo de bases de datos controladas por prueba)?
- 5. ¿Qué tipos de bases de datos están disponibles en Android?
- 6. ¿Qué complementos de compilador scala están disponibles?
- 7. Qué tipo de herramientas están disponibles para completar los datos de prueba en mongodb
- 8. qué bases de datos nosql están disponibles para azul
- 9. ¿Qué controladores MySQL están disponibles para node.js?
- 10. C# estructuras de datos
- 11. ¿Qué herramientas están disponibles para la refacturación de Ruby?
- 12. ¿Qué Herramientas/marcos de desarrollo impulsado por comportamiento (BDD) están disponibles para Microsoft Stack?
- 13. ¿Qué herramientas de análisis estático están disponibles para C#?
- 14. ¿Qué complementos/utilidades están disponibles para TFS?
- 15. ¿Qué tipo de funciones/métodos de logaritmo están disponibles en objective-c/cocoa-touch?
- 16. ¿Qué informes están disponibles para svn?
- 17. ¿Qué hacks de CSS puros específicos de Safari están disponibles?
- 18. ¿Qué herramientas de registro de depuración están disponibles desde Javascript?
- 19. Qué herramientas de diseño de pantalla están disponibles
- 20. ¿Qué comandos de salida de consola están disponibles en Erlang?
- 21. ¿Qué fuentes están disponibles en Android?
- 22. ¿Qué enfoques están disponibles para los datos ficticios de tiempo de diseño en WPF?
- 23. Qué bibliotecas están disponibles para analizar C++ para extraer información de tipo
- 24. ¿Qué servicios de notificación push iPhone están disponibles? (Servicios hospedados, no APNS)
- 25. Desarrollo de juegos de Iphone
- 26. ¿Qué herramientas BUENAS están disponibles para generar ERD desde una base de datos de SQL Server?
- 27. ¿Qué métodos de almacenamiento en caché, que no sean archivos o bases de datos, están disponibles?
- 28. ¿Qué administradores de sesión alternativos están disponibles para Emacs?
- 29. ¿Qué herramientas están disponibles para documentar los complementos de jQuery?
- 30. ¿Qué paquetes LaTeX están disponibles para los diagramas de circuitos?
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. –