Введение
В этом посте мы кратко рассмотрим основные различия между 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