2009-08-23 20 views
5

Tengo una biblioteca escrita en C que me gustaría usar en una aplicación Objective-C, ya sea en Mac o iPhone.Consejos para envolver una biblioteca C en Objective-C

Desafortunadamente, dado que esta biblioteca está siendo escrita por individuos en el espacio de código abierto, la documentación es bastante escasa e incompleta. Aunque puedo descifrar cómo usar las cosas en la biblioteca, realmente no tengo una visión general de toda la base de códigos.

Lo que me gustaría hacer es incluir la biblioteca en algunas clases fácilmente utilizables y transferibles en Objective-C.

  • ¿Alguien tiene alguna sugerencia sobre cómo abordar esto?
  • ¿Algún consejo sobre la mejor manera de obtener una jerarquía visual de cómo está estructurada la biblioteca?
  • ¿Qué debo hacer para decidir cómo estructurar mejor la envoltura para su reutilización y facilidad de uso?

Toda ayuda será muy apreciada, gracias!

Respuesta

7

He hecho esto algunas veces yo mismo. Esto puede ser divertido: ¡es tu oportunidad de arreglar (o al menos ocultar) el código incorrecto!

Puede usar Doxygen para obtener una jerarquía visual del código (aunque solo lo he usado para bibliotecas C++, también funciona con C), o cualquiera de las otras herramientas gratuitas disponibles.

No estructure su clase contenedora como la biblioteca subyacente si la biblioteca no está diseñada o documentada correctamente. Esta es su oportunidad de considerar el punto de vista del usuario y cómo van a usar el código. Escriba sus casos de prueba primero para descubrirlo y/o hable con algunas personas que ya usan la biblioteca.

Dos patrones de diseño agradables que coinciden con lo que está haciendo son Adapter y Facade.

+2

+1. Debe definir algunas interfaces agradables que hagan lo que usted quiere primero, luego complete las implementaciones usando la biblioteca C –

+0

Cuando dice interfaces, ¿quiere decir interfaces de usuario o interfaces de código? – Jasarien

+0

Creo que quiere decir interfaces de código. –

2

Primero, recuerde: una biblioteca C es una biblioteca Objective-C. En realidad, no necesita realizar ningún ajuste, aunque es posible que desee si la interfaz de la biblioteca es especialmente engorrosa.

En segundo lugar, si decide que desea escribir un contenedor de la biblioteca, manténgalo simple. Identifique las funciones básicas de la biblioteca que planea usar, y piense en la mejor manera de proporcionar una interfaz para esas funciones y esas funciones únicamente, con su uso previsto en mente. Diseña una interfaz con la que quieras trabajar y luego impleméntala en la biblioteca.

0

Desde que se agregó el ARC (conteo automático de referencias) a los compiladores y bibliotecas de Apple, Objective-C y C ya no son tan intercambiables. (Here's una lista de documentación y tutoriales de ARC). Debe tener en cuenta los problemas de asignación de memoria mucho más a fondo, y es posible que desee "puentear" las bibliotecas. Vea this SO question y algunos de los enlaces desde allí, sobre cómo Apple une las bibliotecas Obj-C y C.

Cuestiones relacionadas