ІМО, проблема з 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, щоб приєднатися до них).