Класс / Экземпляры-аналогии
Классы, как чертежи для типового дома. Экземпляры похожи на настоящие дома. Таким образом, вы можете иметь только один план для одного типа дома, но вы можете иметь несколько реальных домов одного типа. Кроме того, у вас может быть несколько чертежей, и каждый план описывает свой тип дома.
Другая аналогия, которую вы можете использовать, заключается в том, что классы похожи на формочки для печенья, а экземпляры похожи на файлы cookie, изготовленные из формочки.
Как это относится к Objective-C
Существует один "объект класса" для каждого класса в вашем коде. Чтобы сослаться на объект класса, вы просто используете имя класса. alloc
- это метод класса, который выделяет новый экземпляр следующим образом:
MyWidget* w = [MyWidget alloc];
Однако alloc
не инициализирует класс, поэтому ни одна из переменных-членов не будет установлена. init
- это метод экземпляра , который инициализирует вновь выделенный экземпляр. Итак, чтобы выделить и инициализировать новый экземпляр, вы делаете это:
MyWidget* w = [[MyWidget alloc] init];
Что эквивалентно этому:
MyWidget* w = [MyWidget alloc]; //alloc is being called on the class
w = [w init]; //init is being called on the instance
Другим распространенным типом метода класса является фабричный метод, такой как numberWithChar:
. Это в основном то, что numberWithChar:
делает:
+(NSNumber*) numberWithChar:(char)c;
{
return [[[NSNumber alloc] initWithChar:c] autorelease];
}
Единственная реальная разница в том, что numberWithChar:
возвращает автоматически освобожденный объект.
Все объекты должны быть выделены и инициализированы. Это включает базовые классы.