В процессе попытки преобразовать мои классы глобального контроллера на основе синглтона в более удобный ООП-метод внедрения зависимостей, передавая требуемые методы из одного объекта в другой по мере необходимости. Я столкнулся с проблемой, когда мой предыдущий класс использовал глобальный объект во время инициализации.
(id)init
{
self = [super init];
if (self)
{
[self setUpPhysicsWithWorld:FMPresenter.physics.world];
}
return self;
}
Где FMPresenter.physics
возвращает физический объект-одиночка. Поскольку мой объект не может быть правильно создан без объекта Physics, вызов init
недопустим. Я видел это используется:
(id) init
{
NSAssert(NO, @"init not allowed");
[self release];
return nil;
}
(id) initWithPhysics:(FMPhysics*)physics
{
self = [super init];
if (self) {
[self setUpPhysicsWithWorld:physics.world];
}
return self;
}
Является ли это предпочтительным методом для принудительного применения параметров конструктора в Objective-C?