В настоящее время я жестко кодирую другой объект напрямую, когда это необходимо, и мне бы хотелось иметь возможность воспринимать это через метод init (я полагаю?). В приведенном ниже коде я создаю новый HatService в методе viewDidLoad, и я бы предпочел не делать этого из соображений тестируемости / связности.
- (void)viewDidLoad
{
[super viewDidLoad];
HatService* hatService = [[HatService alloc] init];
[hatService getHatById:self];
}
Первый вопрос - как это сделать в target-c?
Второй вопрос - должен ли я волноваться об этом или делать это вообще?
Обновление
Вот то, с чего я начинаю, но я никогда не сталкиваюсь с первым методом инициализации во время выполнения. Я оба объявил в интерфейсе - что еще я пропустил, что позволило бы мне переопределить этот метод init и внедрить служебную зависимость?
Примечание. Я могу выполнить это вручную, когда сам создаю объект, но когда appDeleage выполняет работу, я не вижу, чтобы это произошло (как делегат приложения создает этот объект без вызова моего метода 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];
}