緊密なストーリーボード統合:
通常のandとともにplist 統合が使用されている限り、Typhoon はすべての Storyboard が TyphoonStoryboard であることを保証します。通常のストーリーボードとまったく同じように使用し、依存関係が TyphoonAssembly クラスの定義に従って注入されるという追加の利点があります。UILaunchStoryboardName
UIMainStoryboardFile
TyphoonComponentFactory はストーリーボードによって保持されるため、アプリのライフサイクル全体を通じて保持されます。
ストーリーボード以外: (つまり、MacOS アプリ、ユーティリティなど)
TyphoonComopnentFactory は実際、アプリのライフサイクル全体を通じて保持されるように設計されています。(ただし、必要に応じて他のことを行うこともできます)。
キーコンセプト:
- をそのままお使いいただけます
TyphoonComponentFactory
。
- また、どのアセンブリ インターフェイスも TyphoonComponentFactory の前に配置できます。ビルド時に、アセンブリは定義を返します。実行時に、ビルドされたコンポーネントを返します。
あるオブジェクトグラフから別のオブジェクトグラフに進むときに TyphoonComponentFactory を保持する方法は 2 つあります。このコンポーネントの作成を「台風対応」と呼びます。
アプローチ 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 対応' にするもう 1 つの方法は、Typhoon のコールバック フックを使用することです。NSObject カテゴリ メソッドをオーバーライドすることにより :
typhoonSetFactory:(id)thefactory
上記の他のアプローチと同様に、ファクトリはTyphoonComponentFactory
アセンブリ インターフェイスとして使用することができます。
typohoonSetFactory:(TyphoonComponentFactory*)factory
{
//Do something with factory
}
typhoonSetFactory:(ApplicationAssembly*)assembly
{
//Do something with assembly
}
2 つの方法のうち、最も適した方法を使用してください。前者をお勧めします。これは「非侵襲的」であるため、独自のクラスが Typhoon API を直接呼び出さないことを意味します。Typhoon から移行したい場合は、アセンブリの代替実装を提供するだけです。
あるオブジェクト グラフから別のオブジェクト グラフに進む:
上記の方法のいずれかを使用してコンポーネントが「台風対応」になると、これを使用して、あるオブジェクトグラフから別のオブジェクトグラフに進むことができます。
- Typhoon のデフォルトのスコープは です。これは
TyphoonScopeObjectGraph
、デリゲートと循環参照を含むビュー コントローラーをロードできることを意味します。完了すると、メモリから破棄されます。
- 一方、
TyphoonScopeSingleton
(またはTyphoonScopeWeakSingleton
) のすべてのコンポーネントは保持されます。
この機能の詳細については、こちらのユーザー ガイドを参照してください。
あるストーリー ボードから別のストーリー ボードに進む:
アプリのある時点で新しいストーリーボードをプログラムでインスタンス化するには (ビュー コントローラーなど):
UIStoryboard *board = [TyphoonStoryboard storyboardWithName:@"name"
factory:factory bundle:[NSBundle mainBundle]];
. . 上記のアプローチ 1 またはアプローチ 2 を使用してファクトリを取得します。
概要:
- アセンブリは、通常の Objective-C/Swift メモリ ルールに従います。そのため、少なくとも 1 つのクラスで使用されている限り、存続し続けます。上記の「あるオブジェクト グラフから別のオブジェクト グラフに進む」プロセスを使用することは、アプリのライフサイクル全体を通じて持続することを意味します。