Objective-C - разные версии одной и той же библиотеки приводят к конфликтам имен - PullRequest
3 голосов
/ 01 марта 2012

Я прочитал Objective – C может легко привести к коллизиям имен из-за своей природы, поэтому рекомендуется ставить префикс перед вашим кодом.

Как решить эту проблему, если ваше MyAwesomeApp приложение для iOS, использующее две внешние библиотеки FooLibrary и BarLibrary, приводит к конфликтам имен, поскольку внутри FooLibrary также используется BarLibrary?

Сначала можно предложить удалить одну из ссылок на BarLibrary, но вы не можете этого сделать, потому что, хотя оба являются BarLibrary, на самом деле это две разные его версии, поэтому FooLibrary зависит в реализации BarLibrary(v1), тогда как ваша MyAwesomeApp зависит от реализации BarLibrary(v2).

В этот момент я понял, что две разные версии одной и той же библиотеки на самом деле две разные вещи, поэтому они не должны сосуществовать в одном проекте.

Есть ли другой способ решить эту загадку, кроме рефакторинга (переименованием) чужого кода, пожалуйста?

1 Ответ

4 голосов
/ 07 марта 2012

Если другая библиотека использует библиотеку, которая, вероятно, будет использоваться совместно, например, библиотеку JSON, и они собирают библиотеку, которую вы можете включить, тогда они действительно должны поместить свои собственные префиксы в библиотеку.1002 * Я видел, как это было сделано, например, с Urban Airship.Они используют JSONKit (или некоторую библиотеку JSON), но они префиксуют все использования JSONKit с UA - так что, когда я использую другую версию JSONKit, они компилируются и работают вместе.

Я также видел, что это сделано с помощью Reachability ... у каждого, кажется, есть своя собственная версия этого ...

...