Я импортирую две разные платформы 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)?