Ответ 1
Конструкция по умолчанию обычно начинается с того, что имеет следующий формат -init
или любой вариант, например, -initWithFrame:
.
Метод +initialize
- это метод класса (статический метод), который вызывается хотя бы один раз, когда ваше приложение запускается. Вы можете использовать этот метод для инициализации статических переменных, которые полезны во всех экземплярах класса. Этот способ может быть полезен, например, инициализировать общий кэш или общую карту поиска для класса.
Для NSObject
метод -init
является назначенным инициализатором, но для других классов это может отличаться. Apple документирует назначенный инициализатор в заголовках класса с использованием макроса NS_DESIGNATED_INITIALIZER
. Например, подклассы UIView
должны переопределять -initWithFrame:
и -initWithCoder:
вместо этого, поскольку эти методы помечены как назначенные инициализаторы.
При подклассовке и реализации пользовательского назначенного инициализатора не забудьте также инициализировать суперкласс. Пусть, например, есть подкласс UIView
, у которого есть назначенный инициализатор -initWithFrame:title:
. Мы будем реализовывать его следующим образом:
// A custom designated initializer for an UIView subclass.
- (id)initWithFrame:(CGRect)frame title:(NSString *)title
{
// Initialize the superclass first.
//
// Make sure initialization was successful by making sure
// an instance was returned. If initialization fails, e.g.
// because we run out of memory, the returned value would
// be nil.
self = [super initWithFrame:frame];
if (self)
{
// Superclass successfully initialized.
self.titleLabel.text = title
}
return self;
}
// Override the designated initializer from the superclass to
// make sure the new designated initializer from this class is
// used instead.
- (id)initWithFrame:(CGRect)frame
{
return [[self alloc] initWithFrame:frame title:@"Untitled"];
}
Более подробную информацию об инициализации можно найти на веб-сайте Apple Developer: