IMO, das Problem mit Objective-C ist nicht so sehr ein massiver Mangel, sondern eher ein kleiner Mangel (besonders am Anfang) und ein Mangel an wahrgenommenen Vorteilen.
Objective-C war eine reine Obermenge von C, sodass C- Code leicht zu Objective-C übergehen konnte. Die Einstellung zu verwenden , Objective-C, jedoch von der C - Mentalität ein unterschied sich viel . Der Übergang von C zu Objective-C ist für Code einfach, für viele Programmierer jedoch überhaupt nicht. AC-Programmierer können nicht einfach ein paar neue Komfortfunktionen in Objective-C auswählen und erhalten fast sofort eine bessere Produktivität - er muss eine Menge neuer "Dinge" lernen, bevor er überhaupt irgendwohin gelangen kann.
C ++ machte den Übergang für einige Codes etwas schwieriger, aber für die meisten Programmierer viel einfacher. C-Programmierer, die es gewohnt sind, mit jedem Detail ihres Codes umzugehen, könnten dies in C ++ immer noch genau so tun, wie sie es wollten. C ++ machte es auch einfach, einige neue Funktionen zu verwenden (z. B. das Hinzufügen eines ctor, um Mitglieder Ihrer Struktur automatisch zu initialisieren), ohne Ihre Denkweise wirklich zu ändern. Viele OO-Puristen drängten auf radikale Änderungen im Denken, aber viele C-Programmierer wechselten zu C ++, ohne etwas Ähnliches zu tun (zumindest sofort - und oft auch immer, wenn es so aussieht).
C ++ auch sah viel besser vertraut zu den meisten C - Programmierer. Es wurden ein paar neue Schlüsselwörter hinzugefügt, aber (besonders zu Beginn) sah der Code immer noch ziemlich vertraut aus. Trotz seiner „reinen Obermenge“ -Status, die meisten Objective-C - Code sieht ziemlich fremd die meisten C - Programmierer. Vieles in C ++ ist auch ziemlich einfach zu erklären und zu verstehen, was die Funktionsweise von C angeht. Bei einem Wechsel zu Objective-C gibt es noch viel mehr Stellen, die Sie als "Vertrau mir einfach und vergiss alles, was du zu wissen glaubst" bezeichnen können. "
Viele der Entwurfsentscheidungen in Objective-C haben es auch (etwas) langsamer als C ++ gemacht, insbesondere auf relativ alten Computern mit langsamen Prozessoren, begrenztem Arbeitsspeicher usw. Zu Recht oder zu Unrecht wurde es auch größtenteils als Einzelprodukt angesehen C ++ war für jedermann frei verfügbar und konnte von jedermann implementiert werden.
All dies führte dazu, dass C ++ früh genug eingeführt wurde, so dass es ziemlich schnell eine "kritische Masse" erreichte, so dass es (unter anderem) die offensichtliche Wahl für viele Projekte wurde, nur weil es bereits weit verbreitet und bekannt war Menge.
Objective-C hat diesen Punkt nie erreicht. Tatsächlich war es auf dem besten Weg, in Vergessenheit zu geraten, als Apple es wiederbelebte, indem es fast jedem aufgezwungen wurde, der für seine Systeme entwickeln wollte. Der Marktanteil von Apple ist jedoch nicht groß genug, um ihm wirklich eine kritische Masse zu verleihen - nur eine größere Nische. Es ist eine "Standard" Wahl, nur wo / weil Apple es so macht.
Ich möchte auch hinzufügen, dass das Smalltalk-ähnliche Objektmodell von Objective-C meiner Meinung nach in Wirklichkeit eine viel stärkere Konkurrenz zu Java darstellt als C ++. Ja, es hat immer noch die C-Basis und Sie können immer noch Code auf niedriger Ebene schreiben, ohne eine separate Sprache zu verwenden - aber reines C und reales Objective-C sind genug verschieden, dass es weniger wie eine einzelne Sprache als zwei völlig verschiedene Sprachen ist zufällig werden beide von einem einzigen Compiler verarbeitet (obwohl es praktisch ist, dass die beiden miteinander kommunizieren können, ohne dass sich JNI ihnen anschließt).