¿Cuál es la mejor manera de resolver una colisión de espacio de nombres de Objective-C?

Objective-C no tiene espacios de nombres; es muy parecido a C, todo está dentro de un espacio de nombres global. La práctica común es prefijar clases con iniciales, p. Ej. si está trabajando en IBM, puede prefijarlos con "IBM"; si trabajas para Microsoft, puedes usar "MS"; y así. Algunas veces las iniciales se refieren al proyecto, por ej. Adium prefiere las clases con "AI" (ya que no hay ninguna compañía detrás de eso, usted podría tomar las iniciales). Apple prefija las clases con NS y dice que este prefijo está reservado solo para Apple.

Hasta aquí todo bien. Pero agregar de 2 a 4 letras a un nombre de clase en frente es un espacio de nombres muy, muy limitado. P.ej. MS o AI podrían tener un significado completamente diferente (AI podría ser Inteligencia Artificial, por ejemplo) y algún otro desarrollador podría decidir usarlos y crear una clase con el mismo nombre.Explosión, colisión espacio de nombres.

De acuerdo, si se trata de una colisión entre una de sus propias clases y una de un marco externo que está utilizando, puede cambiar fácilmente el nombre de su clase, no es gran cosa.Pero, ¿qué sucede si utiliza dos marcos externos, ambos marcos a los que no tiene la fuente y que no puede cambiar? Tu aplicación se vincula con ambos y obtienes conflictos de nombre. ¿Cómo irías resolviendo estos? ¿Cuál es la mejor manera de evitarlos de tal manera que aún pueda usar ambas clases?

En C puede solucionar estos problemas al no enlazar directamente con la biblioteca, en lugar de eso, cargue la biblioteca en tiempo de ejecución, utilizando dlopen (), luego busque el símbolo que está buscando usando dlsym () y asigne un símbolo global (que puede nombrarlo como desee) y luego acceder a él a través de este símbolo global. P.ej. si tiene un conflicto porque alguna biblioteca C tiene una función llamada open (), puede definir una variable llamada myOpen y hacer que apunte a la función open () de la biblioteca, por lo tanto, cuando quiera usar el sistema open (), simplemente utiliza open () y cuando quiera usar el otro, acceda a él a través del identificador myOpen.

¿Es posible algo similar en Objective-C y, de no ser así, hay alguna otra solución inteligente y complicada que pueda utilizar para resolver conflictos de espacio de nombres? ¿Algunas ideas?

Actualizar:

Solo para aclarar esto: son bienvenidas las respuestas que sugieren cómo evitar las colisiones de espacio de nombres por adelantado o cómo crear un mejor espacio de nombres; sin embargo, no los aceptaré comola respuesta ya que no solucionan mi problema Tengo dos bibliotecas y sus nombres de clase chocan. No puedo cambiarlos No tengo la fuente de ninguno de los dos. La colisión ya está allí y los consejos sobre cómo podría haberse evitado por adelantado ya no servirán de nada. Puedo reenviarlos a los desarrolladores de estos marcos y espero que elijan un mejor espacio de nombres en el futuro, pero por el momento estoy buscando una solución para trabajar con los marcos ahora mismo dentro de una sola aplicación. ¿Alguna solución para hacer esto posible?

Respuestas a la pregunta(13)

Su respuesta a la pregunta