Tor*_*ups 3 dependency-injection objective-c
目前我在需要的时候直接硬编码另一个对象,我希望能够通过init方法接受这个(我假设?).在下面的代码中,我在viewDidLoad方法中创建了一个新的HatService,出于可测试性/耦合的原因,我不想这样做.
- (void)viewDidLoad
{
[super viewDidLoad];
HatService* hatService = [[HatService alloc] init];
[hatService getHatById:self];
}
Run Code Online (Sandbox Code Playgroud)
第一个问题 - 如何在objective-c中完成?第二个问题 - 我应该担心这个还是做到这一点?
更新
这是我开始的,但我似乎从来没有在运行时遇到第一个init方法.我已经在界面中声明了 - 我错过的任何其他内容都允许我覆盖此init方法并注入服务依赖项?
注意 - 当我自己创建对象时,我可以手动点击这个,但是当appDeleage完成工作时我没有看到它(如果app委托创建这个对象而不调用我的init方法?)
-(id)initWithHatService:(HatService *)service
{
if (self = [super init])
{
[self setService:service];
}
return self;
}
-(id)init
{
HatService* hatService = [[HatService alloc] init];
return [self initWithHatService:hatService];
}
Run Code Online (Sandbox Code Playgroud)
指定的初始化程序UIViewController是- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle.如果您希望从nib文件中正确实例化视图控制器,则需要覆盖此方法,如果这是您正在尝试执行的操作.如果没有看到更多代码,就无法分辨,但这种方法肯定会被称为某个地方.
其次,您需要重新编写您的-init方法,如下所示:
- (id)init {
return [self initWithHatService:nil];
}
Run Code Online (Sandbox Code Playgroud)
每个init方法都应该调用指定的初始化程序.
最后,当您处理视图控制器时,人们通常不会在init方法中传入属性.实例化新控制器,然后将其传递给您喜欢的任何服务属性.
MyViewController *newContrlr = [[MyViewController alloc] initWithNibName:nil bundle:nil];
newContrlr.hatService = [[[HatService alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |