目前我在需要的時候直接對另一個對象進行硬編碼,我希望能夠通過初始化方法(我假設?)進行這項工作。在下面的代碼中,我在viewDidLoad方法中創建了一個新的HatService,爲了可測試性/耦合的原因,我不希望這樣做。你可以在objective-c中完成某種形式的依賴注入嗎?
- (void)viewDidLoad
{
[super viewDidLoad];
HatService* hatService = [[HatService alloc] init];
[hatService getHatById:self];
}
第一個問題 - 這應該怎麼做在objective-c? 第二個問題 - 我應該擔心這個問題還是一直這麼做?
更新
這裏是我開始用,但我似乎從來沒有在運行過程中碰到的第一個init方法。我都在界面中聲明瞭 - 我錯過的其他任何東西都會允許我重寫這個init方法並注入服務依賴項?
注 - (?如何應用程序的委託創建這個對象沒有打電話給我的init方法),當我創建對象,我可以手動打這個自己,但在appDeleage做的工作時,我沒有看到它打這個
-(id)initWithHatService:(HatService *)service
{
if (self = [super init])
{
[self setService:service];
}
return self;
}
-(id)init
{
HatService* hatService = [[HatService alloc] init];
return [self initWithHatService:hatService];
}
這是我的第一個想法 - 但是如果我想要提供默認實現,我可以做另一個只調用一個w/args的init(類似於java中的可憐人DI/c#) - 關於你無關的說明..應該這個autorelease或什麼是最好的選擇?仍然是新的內存管理的東西,並有很多返工在我的名單上(任何幫助將是偉大的!) – 2011-01-09 23:55:52