ИМО, проблема с Objective-C заключается не столько в серьезных недостатках, сколько в незначительных недостатках (особенно на ранних этапах) и отсутствии очевидных преимуществ.
Objective-C был чисто надмножеством C, поэтому C- код мог легко перейти на Objective-C. Настрой для использования Objective-C, однако, отличается от C склад ума в партии . Переход от C к Objective-C прост для кода, но совсем не прост для многих программистов. Программист переменного тока не может просто выбрать несколько новых удобных функций в Objective-C и получить лучшую производительность практически сразу - ему нужно изучить много новых «вещей», прежде чем он вообще сможет что-то получить.
C ++ сделал переход для некоторого кода немного сложнее, но переход для большинства программистов намного проще. Программисты на C, привыкшие иметь дело с каждой деталью своего кода, все еще могут делать это на C ++ именно в той степени, в которой они хотят. C ++ также облегчает использование некоторых новых функций (например, добавление ctor для автоматической инициализации членов вашей структуры) без реального изменения вашего мышления. Многие пуристы OO подталкивали к радикальным изменениям в мышлении, но многие программисты на C переключились на C ++, не делая ничего подобного (по крайней мере, прямо сейчас - и часто когда-либо, с точки зрения вещей).
C ++ также выглядел гораздо более знакомым для большинства программистов на C. Было добавлено несколько новых ключевых слов, но (особенно на ранних этапах) код все еще в основном выглядел довольно знакомым. Несмотря на свой статус «чисто надмножества», большая часть кода Objective-C выглядит довольно чуждой для большинства программистов на C. Многое из C ++ также довольно легко объяснить и понять с точки зрения того, как все работает в C. Переключение на Objective-C имеет гораздо больше мест, о которых вы можете сказать: «Просто доверься мне и забудь все, что ты думаешь, что знаешь». "
Многие из проектных решений в Objective-C также сделали его (несколько) более медленным, чем C ++, особенно на относительно старых машинах с медленными процессорами, ограниченной памятью и т. Д. Правильно или неправильно, его также рассматривали в основном как продукт для одной компании, где C ++ был свободно доступен для всех и каждого для реализации.
Все это привело к тому, что C ++ был принят достаточно быстро на раннем этапе, что он довольно быстро достиг «критической массы», поэтому (среди прочего) он стал очевидным выбором для многих проектов только потому, что он уже широко использовался, хорошо известен. количество.
Objective-C никогда не достигал этой точки. На самом деле, он был на пути к исчезновению в безвестности, когда Apple восстановил его, почти навязав его любому, кто хотел разрабатывать для своих систем. Однако доля Apple на рынке не достаточно велика, чтобы действительно придать ей критическую массу - просто большая ниша. Это «выбор по умолчанию» только там, где / потому что Apple делает это так.
Я бы также добавил, что, по крайней мере, на мой взгляд, объектная модель, похожая на Smalltalk в Objective-C, означает, что в действительности она намного больше прямой конкурент Java, чем C ++. Да, он по-прежнему имеет подоплеку C, и да, вы все равно можете писать низкоуровневый код без использования отдельного языка - но чистый C и настоящий Objective-C достаточно различны, так что он меньше похож на один язык, чем на два совершенно разных языка, которые случается, что оба они обрабатываются одним компилятором (хотя удобно, что эти два могут общаться друг с другом без чего-то вроде JNI, чтобы присоединиться к ним).