在尝试将之前基于单例模式的全局控制器类转换为更友好的OOP依赖注入方法时,我遇到了一个问题:我的先前类在其初始化期间使用了全局对象,而现在需要将所需的方法从一个对象传递到另一个对象中。
这是在Objective-C中强制使用构造函数参数的首选方法吗?
(id)init
{
self = [super init];
if (self)
{
[self setUpPhysicsWithWorld:FMPresenter.physics.world];
}
return self;
}
FMPresenter.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中强制使用构造函数参数的首选方法吗?