Для чего нужен этот штрих и почему в скобках стоит void?
Тире -
означает «уровень экземпляра» (это значение по умолчанию в Java). Когда вы видите знак плюса +
, это означает уровень класса (такой же, как использование static
в Java)
Пустота в скобках - это тип возвращаемого значения, см. Ниже.
Почему у нас нет точки с запятой после (int) n? Но у нас есть это здесь:
-(void) setNumerator: (int) n;
Поскольку это сигнатура метода, вы можете рассматривать ее как интерфейс:
interface YourClass {
void setNumerator(int n );// see? semicolon
}
Та же ситуация.
Objective-C, имеющий корни в C (на самом деле это настоящий C с объектами), нуждается в файле заголовка (полностью удаленном в Java), где вы определяете, какие функции / методы будут иметь ваш класс.
Эквивалент, если бы такая вещь существовала в Java, была бы:
// YourClass.java.h
interface YourClass {
void setNumerator(int n );
}
// YourClass.java.m
class YourClass {
void setNumerator( int n ) {
this.n = n;
}
}
А что с этим процессом alloc, init, release?
myFraction = [Fraction alloc];
myFraction = [myFraction init];
[myFraction release];
allo-init является эквивалентом new
в Java, alloc
- это когда вы запрашиваете память для вашего объекта, alloc
запрашивает память, а init
вызывает метод init
, эквивалентный Java конструктор класса (кстати, Руби делает то же самое за кадром )
В Java нет эквивалента релизу, потому что он сборщик мусора, в Objective-C вы должны освободить свой объект.
Кстати, инициализация также может быть myFraction = [[Fraction alloc]init];
И, наконец, что со знаками @ и что эквивалентна эта реализация в Java?
@implementation Fraction
@end
Это определение класса, как я упоминал ранее.
В настоящее время я читаю Программирование в Objective C 2.0, и это очень расстраивает, изучая этот новый синтаксис для кого-то на фоне Java.
Вот соответствующий ответ, который поможет вам лучше ознакомиться с квадратными скобками:
Краткая история "квадратных скобок" - это я помню.