Введение

В этом посте мы кратко рассмотрим основные различия между Objective-C и Java. Важно отметить, что и Objective-C, и Java являются объектно-ориентированными. Однако существуют большие различия в синтаксисе и в том, как каждая реализует концепции объектно-ориентированного программирования. Имея это в виду, я сначала обобщу самые большие различия, а затем расскажу о каждом более подробно.

Большие очки

  • Java делает свою собственную сборку мусора
  • Objective-C — это язык, используемый Apple для разработки под iOS и Mac OS X.
  • Java — исключительно строго типизированный язык.
  • В Objective-C отсутствуют модификаторы видимости для методов
  • Java использует пространства имен (пакеты)
  • Objective-C использует передачу сообщений вместо ссылки на метод

Сборка мусора / Java рука держит

Как язык программирования, Java очень помогает разработчикам. Это включает в себя собственную сборку мусора и управление памятью.

Однако в Objective-C это не так. Как и язык C, он основан на Objective-C, который требует от программиста управления памятью. При этом автоматический подсчет ссылок (ARC) — это инструмент, представленный в Xcode 4.2. ARC автоматически добавляет необходимые методы управления памятью. Однако это всего лишь инструмент, язык по-прежнему требует команды для выполнения задач управления памятью. Сборка мусора полностью возложена на операционную систему. Ниже приведены методы управления памятью и краткое описание.

Поведение метода
alloc: создать объект и заявить о своем праве на него.
сохранить: заявить о праве собственности на существующий объект.
копировать: скопировать объект и заявить о своем праве на него.
выпуск : Отказаться от владения объектом и немедленно уничтожить его.
autorelease: Отказаться от владения объектом, но отсрочить его уничтожение.
ref: здесь

Платформа

Эти два языка также сильно различаются по платформам, которые их поддерживают. Objective-C почти исключительно используется для разработки Apple либо для их систем iOS (например, iPhone), либо для Mac OS X (компьютеры). С другой стороны, Java можно использовать где угодно и где угодно. Как язык Java гордится своей переносимостью между системами. Java также более популярен и широко распространен, поскольку его можно легко использовать для любого вида разработки. Его можно использовать для разработки приложений, веб-приложений или мобильных приложений.

Строго типизированный

Java и Objective-C могут быть строго типизированы, разница возникает там, где Java строго типизирована, а Objective-C может быть как строго, так и слабо типизирована. В Objective-C переменная может быть объявлена ​​как строго типизированная и будет рассматриваться как таковая или оставлена ​​как слабо типизированная по умолчанию.

В Java объявление переменной выглядит так:

 private boolean bool;

Для Objecive-C это можно сделать одним из двух способов:

 Strongly Typed note the *:
 BOOL *bool; 
 Loosely typed
 BOOL bool;

Модификаторы видимости метода

В Java видимость метода устанавливается так же, как и видимость переменной; с ключевыми словами private, public, protected и т. д. Однако в Objective-C нет такой возможности для методов. Методы делаются «приватными» путем исключения их из файла .h (заголовочного файла) и использования префикса _ в имени метода. Однако _ - это просто практика кодирования, которая также используется для частных переменных.

Например:

 @private
 NSString *_privateString;

ПРИМЕЧАНИЕ: @private // это директива компилятора в Objective-C, которая устанавливает следующие переменные как частные

Пространства имен

Java поддерживает пространства имен в виде пакетов. Пространства имен предотвращают конфликты классов. Objective-C не поддерживает пространства имен, поэтому для достижения того же эффекта программисты должны добавлять префиксы к именам классов. Эти профиксы обычно состоят из трех букв, поскольку Apple резервирует двухбуквенные профиксы для собственного использования.

Например:
Java:

 java.lang.String s;

Цель-C

 NSString *s;

ПРИМЕЧАНИЕ. NSString — это встроенный класс, созданный Apple, поэтому префикс из двух букв.

Обмен сообщениями против методов

В Objective-C есть два типа методов. Уровень класса, который обозначен знаком + и действует как статические методы в Java, и уровень экземпляра, отмеченный знаком -. В Objective-C методы вызываются путем отправки объекту сообщения, тогда как в Java методы вызываются с использованием ссылки на метод. Во многом они отличаются синтаксисом и тем, как они работают. Я не буду вдаваться в подробности о фактических закулисных действиях по обмену сообщениями, потому что это не является моей целью в этом посте. Просто знайте, что они разные, и справку о внутренней работе обмена сообщениями смотрите Здесь.
Продолжая, есть исключение в синтаксисе сообщений Objective-C. Когда дело доходит до методов доступа, можно использовать запись через точку. В Java синтаксис для всех вызовов методов одинаков.

Примеры
Objective-C
Уровень класса:

 [ObjClass classLevelMethod:parameter];
 [self classLevelMethod:parameter];

Уровень экземпляра

 [someObject instanceLevel:parameter]

Метод доступа

 someObject.property = 32;

Java
Уровень класса

 JavaClass.staticMethod();
 this.staticMethod();

Уровень экземпляра

 someObject.nonStaticMethod();

Использованная литература:



http://pooh.poly.asu.edu/Cst502/Resources/ObjectiveC/objective-c-and-java.pdf