[ios]台风-使用整个应用程序的一个组件工厂。

标签: Xcode ios
发布时间: 2017/3/28 23:00:29
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在 plist,用于实例化的第一个控制器配置的初始程序集 storyboard

后来在应用程序中我要换一根视图控制器使用︰

 TyphoonStoryboard* storyboard = [TyphoonStoryboard storyboardWithName:storyboardType factory:factory bundle:nil];
 UIViewController* newRootView = [storyboard instantiateViewControllerWithIdentifier:identifier];
 self.window.rootViewController = newRootView;

我想当实例化新的视图控制器时,使用相同的程序集。原因是我想要保持单身,单身。如果程序集/工厂要改变所有类包括单身者再次,都创建。

怎样才能用于初始化的第一个视图控制器的工厂 storyboard

解决方法 1:

Storyboard 集成︰

只要plist 一体化兼用,跟往常一样 UILaunchStoryboardNameUIMainStoryboardFile ,然后台风将确保任何 Storyboard 是 TyphoonStoryboard。完全与正常人一样使用 storyboard ,与添加受益,将根据您的 TyphoonAssembly 类中定义注入依赖关系。

TyphoonComponentFactory 将保留由 storyboard ,所以您的应用程序的生命周期将会持续。


在storyboard之外: (即苹果 Mac 的应用程序、 实用程序等)

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︰ 使用回调钩︰

制作一个组件 '台风意识到' 另一种方式是使用台风的回调钩子。通过重写NSObject 类别方法学︰

typhoonSetFactory:(id)thefactory

因为其它的方法上面,工厂可以用作 TyphoonComponentFactory 或任何程序集的接口在前面我的姿势,下列两个条件都很好︰

typohoonSetFactory:(TyphoonComponentFactory*)factory
{
    //Do something with factory
}

typhoonSetFactory:(ApplicationAssembly*)assembly
{
    //Do something with assembly
}

两种方法,使用那个最适合你。我们建议,因为前者,它 ' 非侵入性的意思您自己的类不直接调用任何台风 Api。如果你没有想过要迁移脱离台风,你只需将提供替代实现的程序集。



从一个对象图出发到另一个︰

一旦一个组件是 '台风意识到' 使用上面的方法之一,我们可以使用这继续从一个对象图到另一个。

  • 台风的默认范围是 TyphoonScopeObjectGraph ,意思你可以加载视图控制器,包括任何代表和循环引用。完成后,将从内存丢弃。
  • 同时任何组件的 TyphoonScopeSingleton (或 TyphoonScopeWeakSingleton ) 将被保留。

有关此功能的详细信息是在这里的用户指南


从一个故事板出发到另一个︰

要以编程方式实例化一个新 storyboard 在一些点在您的应用程序 (如视图控制器)︰

UIStoryboard *board = [TyphoonStoryboard storyboardWithName:@"name" 
    factory:factory bundle:[NSBundle mainBundle]];

..获取使用方法 1 或方法 2 以上的工厂。



摘要︰

  • 大会遵循正常的目的-C/Swift 记忆规则。所以,只要其正在使用您的类中至少一个,它将继续坚持。使用过程中的 '程序从一个对象图到另一个' 上述手段,它将会持续整个应用程序的生命周期。
官方微信
官方QQ群
31647020