紧密的故事板集成:
只要使用plist 集成以及通常的UILaunchStoryboardName
and UIMainStoryboardFile
,Typhoon 将确保任何 Storyboard 都是 TyphoonStoryboard。与普通故事板完全一样使用,另外还有一个好处是依赖项将根据 TyphoonAssembly 类中的定义注入。
TyphoonComponentFactory 将由故事板保留,因此将在您的应用程序的整个生命周期中持续存在。
故事板之外:(即 MacOS 应用程序、实用程序等)
TyphoonComopnentFactory 确实设计为在您的应用程序的整个生命周期中保留。(尽管如果您愿意,您可以做其他事情)。
关键概念:
- 您可以按
TyphoonComponentFactory
原样使用。
- 此外,您的任何组装接口都可以在 TyphoonComponentFactory 前面摆姿势。在构建时,程序集返回定义。在运行时它返回构建的组件。
从一个对象图到另一个对象图时,有两种方法可以保留 TyphoonComponentFactory。我们将这种组件的制作称为“台风感知”。
方法1:注入程序集:
- (MyAppDelegate *)appDelegate
{
return [TyphoonDefinition withClass:[MyAppDelegate class]
configuration:^(TyphoonDefinition *definition)
{
//Other injections . . .
[definition injectProperty:@selector(factory) with:self];
}];
}
上面的示例将 注入TyphoonComponentFactory
到一个名为 的属性factory
中。
- 当您注入程序集时,它可以用作
TyphoonComponentFactory
.
- 它也可以用作您的任何装配类型。例如,您可以声明一个
components
类型的属性CoreCompopnents
并将程序集注入。
可以在此处的用户指南中找到有关此功能的更多信息。
方法2:使用回调钩子:
使组件“感知台风”的另一种方法是使用 Typhoon 的回调挂钩。通过覆盖 NSObject 类别方法s:
typhoonSetFactory:(id)thefactory
与上面的其他方法一样,工厂可以用作TyphoonComponentFactory
我前面的姿势的一个或任何你的装配接口,以下两种都可以:
typohoonSetFactory:(TyphoonComponentFactory*)factory
{
//Do something with factory
}
typhoonSetFactory:(ApplicationAssembly*)assembly
{
//Do something with assembly
}
在这两种方法中,使用最适合您的一种。我们推荐前者,因为它是“非侵入式”的,这意味着您自己的类不会直接调用任何 Typhoon API。如果您希望从 Typhoon 迁移出去,您只需提供该程序集的替代实现即可。
从一个对象图前进到另一个对象图:
一旦组件使用上述任一方法“感知台风”,我们就可以使用它从一个对象图继续到另一个对象图。
- Typhoon 的默认范围是
TyphoonScopeObjectGraph
,这意味着您可以加载视图控制器,包括任何委托和循环引用。完成后,它将从内存中丢弃。
TyphoonScopeSingleton
同时(或)的任何组件都TyphoonScopeWeakSingleton
将被保留。
有关此功能的更多信息,请参见此处的用户指南。
从一个故事板到另一个故事板:
在您的应用程序(例如视图控制器)中以编程方式实例化新故事板:
UIStoryboard *board = [TyphoonStoryboard storyboardWithName:@"name"
factory:factory bundle:[NSBundle mainBundle]];
. . 使用上述方法 1 或方法 2 获取工厂。
概括:
- 该程序集遵循正常的 Objective-C/Swift 内存规则。因此,只要它被至少一个类使用,它就会继续存在。使用上述“从一个对象图到另一个对象图”的过程意味着它将在您的应用程序的整个生命周期中持续存在。