OMI, le problème avec Objective-C n'est pas tant des lacunes massives, que des lacunes mineures (surtout au début) et le manque d'avantages perçus.
Objective-C était un pur surensemble de C, donc le code C pouvait facilement passer à Objective-C. L'état d' esprit d' utiliser Objective-C, cependant, diffère de la C état d' esprit d' un grand nombre . La transition de C à Objective-C est facile pour le code mais pas facile du tout pour de nombreux programmeurs. Le programmeur AC ne peut pas simplement choisir quelques nouvelles fonctionnalités pratiques dans Objective-C et obtenir une meilleure productivité presque immédiatement - il doit apprendre beaucoup de nouveaux "trucs" avant de pouvoir aller n'importe où.
C ++ a rendu la transition pour certains codes un peu plus difficile, mais la transition pour la plupart des programmeurs beaucoup plus facile. Les programmeurs C qui sont habitués à traiter tous les détails de leur code pourraient toujours le faire en C ++ exactement comme ils le voulaient. C ++ a également facilité l'utilisation de nouvelles fonctionnalités (par exemple, l'ajout d'un ctor pour initialiser automatiquement les membres de votre structure) sans vraiment changer votre façon de penser. Beaucoup de puristes OO ont poussé des changements radicaux dans la pensée, mais beaucoup de programmeurs C sont passés au C ++ sans rien faire de ce genre (au moins tout de suite - et souvent toujours, à en juger par les choses).
C ++ semblait également beaucoup plus familier à la plupart des programmeurs C. Il a ajouté quelques nouveaux mots clés, mais (surtout au début), le code semblait toujours assez familier. Malgré son statut de "surensemble complet", la plupart du code Objective-C semble assez étranger à la plupart des programmeurs C. Beaucoup de C ++ est également assez facile à expliquer et à comprendre en termes de fonctionnement des choses en C. Passer à Objective-C a beaucoup plus d'endroits que tout ce que vous pouvez dire est "faites-moi confiance et oubliez tout ce que vous pensez savoir." "
De nombreuses décisions de conception dans Objective-C l'ont également rendu (un peu) plus lent que C ++, en particulier sur les machines relativement anciennes avec des processeurs lents, une mémoire limitée, etc. À tort ou à raison, il était également considéré en grande partie comme un produit à entreprise unique, où C ++ était disponible gratuitement pour tout le monde et tout le monde à mettre en œuvre.
Tout cela a conduit à l'adoption du C ++ assez rapidement pour qu'il atteigne assez rapidement la «masse critique», donc (entre autres choses), il est devenu le choix évident pour de nombreux projets simplement parce qu'il était déjà largement utilisé et bien connu. quantité.
Objective-C n'a jamais atteint ce point. En fait, il était sur le point de sombrer dans l'obscurité quand Apple l'a relancé en le forçant presque à quiconque souhaitait développer pour ses systèmes. La part de marché d'Apple n'est pas assez importante pour que cela lui donne vraiment une masse critique - juste une niche plus grande. C'est un choix "par défaut" seulement où / parce qu'Apple le fait.
J'ajouterais également qu'au moins à mon avis, le modèle d'objet de type Smalltalk d'Objective-C signifie qu'en fait, il est beaucoup plus un concurrent direct de Java que C ++. Oui, il a toujours les fondements C, et oui, vous pouvez toujours écrire du code de bas niveau sans utiliser un langage séparé - mais le C pur et le vrai Objective-C sont suffisamment différents pour que cela ressemble moins à un seul langage qu'à deux langages complètement différents qui arrive à la fois être géré par un seul compilateur (bien qu'il soit pratique que les deux puissent se parler sans quelque chose comme JNI pour les rejoindre).