Почему нет ошибки компоновщика для одинаковых имен классов в двух разных платформах iOS? - PullRequest
3 голосов
/ 07 марта 2019

Я импортирую две разные платформы Objective C FrameworkA и FrameworkB в пример приложения MyApp, и эти две среды определяют один и тот же класс Person.

Если вы запустите MyApp, на консоли появится следующее предупреждение.

objc[27167]: Class Person is implemented in both
    /private/var/containers/Bundle/Application/9762DB63-21E9-4592-B875-
6DF6F373FFD0/MyApp.app/Frameworks/FrameworkA.framework/FrameworkA 
(0x100b18100) and 
    /private/var/containers/Bundle/Application/9762DB63-21E9-
4592-B875-6DF6F373FFD0/MyApp.app/Frameworks/FrameworkB.framework/FrameworkB
 (0x100b30100). 
One of the two will be used. Which one is undefined.

Почему вы получаете предупреждение вместо ошибки компоновщика, только если (1) в двух разных платформах iOS одинаковые имена классов? Я знаю (2) наличие дублирующих классов в одной среде не скомпилируется из-за ошибки компоновщика из-за проблем с пространством имен.

Насколько я знаю, в обоих случаях компоновщик связывает все исходные коды и библиотеки / фреймворки с одним исполняемым файлом. Но почему компоновщик не выдает ошибку для case (1)?

...