gpt4 book ai didi

ios - 台风 - 在整个应用程序中使用一个组件工厂

转载 作者:可可西里 更新时间:2023-11-01 05:40:53 27 4
gpt4 key购买 nike

我正在 plist 中配置初始程序集,用于实例化 Storyboard中的第一个 Controller 。

稍后在应用程序中,我将使用以下方法更改 Root View Controller :

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

我想在实例化新 View Controller 时使用相同的程序集。原因是我希望单例保持单例。如果程序集/工厂发生变化,所有类都会重新创建,包括单例。

如何获取用于初始化 Storyboard中第一个 View Controller 的工厂?

最佳答案

紧密的 Storyboard集成:

只要plist integration与通常的 UILaunchStoryboardNameUIMainStoryboardFile 一起使用,Typhoon 将确保任何 Storyboard 都是 TyphoonStoryboard。与普通 Storyboard完全一样使用,额外的好处是将根据 TyphoonAssembly 类中的定义注入(inject)依赖项。

TyphoonComponentFactory 将由 Storyboard保留,因此将在您的应用程序的整个生命周期中持续存在。


Storyboard之外:(即 MacOS 应用程序、实用程序等)

TyphoonComopnentFactory 确实被设计为在应用程序的整个生命周期中保留。 (尽管您可以根据需要做其他事情)。

关键概念:

  • 您可以按原样使用 TyphoonComponentFactory
  • 此外,您的任何装配接口(interface)都可以摆在 TyphoonComponentFactory 前面。在构建时,程序集返回定义。 在运行时它返回构建的组件

从一个对象图转到另一个对象图时,有两种方法可以保留 TyphoonComponentFactory。我们将此制作您的组件称为“台风感知”


方法一:注入(inject)程序集:

- (MyAppDelegate *)appDelegate
{
return [TyphoonDefinition withClass:[MyAppDelegate class]
configuration:^(TyphoonDefinition *definition)
{
//Other injections . . .
[definition injectProperty:@selector(factory) with:self];
}];
}

上面的示例将 TyphoonComponentFactory 注入(inject)到名为 factory 的属性中。

  • 当您注入(inject)程序集时,它可以用作 TyphoonComponentFactory
  • 它也可以用作您的任何装配类型。例如,您可以声明类型为 CoreComponents 的属性 components 并以此注入(inject)程序集。

有关此功能的更多信息,请参阅 the User Guide here .


方法 2:使用回调钩子(Hook):

另一种使组件“识别 Typhoon”的方法是使用 Typhoon 的回调 Hook 。通过覆盖 NSObject category method小号:

typhoonSetFactory:(id)thefactory

与上面的其他方法一样,工厂可以用作 TyphoonComponentFactory 或我前面的任何装配接口(interface),以下两种都可以:

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

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

在这两种方法中,使用最适合您的一种。我们推荐前者,因为它是“非侵入性”的,这意味着您自己的类不会直接调用任何 Typhoon API。如果您希望从 Typhoon 迁移出去,您只需提供程序集的替代实现即可。



从一个对象图到另一个对象图:

一旦组件使用上述任一方法“台风感知”,我们就可以使用它从一个对象图继续到另一个对象图。

  • Typhoon 的默认范围是 TyphoonScopeObjectGraph,这意味着您可以加载 View Controller ,包括任何委托(delegate)和循环引用。完成后,它将从内存中丢弃。
  • 同时 TyphoonScopeSingleton(或 TyphoonScopeWeakSingleton)的任何组件都将保留。

有关此功能的更多信息,请参阅 User Guide here .


从一个 Storyboard转到另一个 Storyboard:

在您的应用中的某个点以编程方式实例化一个新的 Storyboard(例如 View Controller ):

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

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



总结:

  • 程序集遵循正常的 Objective-C/Swift 内存规则。因此,只要它至少被您的一个类(class)使用,它就会继续存在。使用上面描述的“从一个对象图到另一个对象图”的过程意味着它将在您的应用程序的整个生命周期中持续存在。

关于ios - 台风 - 在整个应用程序中使用一个组件工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26493529/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com