Я собираюсь немного расширить точку зрения Да Винчи 1.
Первое сходство:
Objective-C и C ++ изначально были основаны на C. Оба языка поддерживают объектно-ориентированную модель. На этом сходство заканчивается.
Objective-C является строгим надмножеством C, C ++ - нет. Любая C-программа также является программой Objective-C. Это не обязательно имеет место с C ++.
Синтаксис OO-расширений Objective-C ближе к синтаксису Smalltalk, чем к C, тогда как обратный случай в случае C ++.
Философия моделей ОО также совершенно иная. Модель Objective-C является динамичной в духе Smalltalk. Модель C ++ более статична. С Objective-C вы отправляете сообщения объектам, и объект решает во время выполнения, как он собирается ответить на сообщение. В C ++ методы, на которые отвечает объект, даже виртуальные, определяются во время компиляции. Это делает объектную модель Objective-C намного более мощной, чем объектная модель C ++. Например, вы можете добавить целые наборы новых методов в существующие классы без использования наследования. Вы даже можете заменить реализацию метода на лету.
Все это, конечно, обходится дорого. Отправка сообщений объектам Objective-C немного медленнее, чем вызов виртуальных функций C ++. Тем не менее, я думаю, что преимущества стоят затрат, и вы всегда можете вернуться к C для критически важных участков кода.
NB. Существует также язык под названием Objective-C ++, который представляет собой OO-расширения Objective-C, построенные поверх C ++ вместо C.