在上面的示例中,如果您希望self.customObj
和temp3
成为同一个实例,那么您需要TyphoonScopeSingleton
or TyphoonScopeWeakSingleton
。
有效的方法TyphoonScopeObjectGraph
是,在解析期间,如果两个实例声明它们依赖于另一个名为 的组件context
,那么context
将返回相同的共享实例。然而,台风不会保留这些。因此,您可以加载整个对象图(例如,视图控制器以及依赖项),然后在完成后将其丢弃,而不是像其他方式那样使用单例。TyphoonScopeObjectGraph
对于循环依赖也很有用,比如控制器和视图,它们有一个委托属性指向控制器。
它有助于用一个例子来解释:假设我们有:
@interface MyViewController : UIViewController
@property(nonatomic, strong, readonly) InjectedClass(ShoppingCart) cart;
@property(nonatomic, strong) InjectedClass(MyView) view;
@end
@interface MyView : UIViewController
@property(nonatomic, strong, readonly) InjectedClass(ShoppingCart) cart;
@end
//ShoppingCart has object-graph scope
@interface ShoppingCart
@end
现在,如果我们要求 Typhoon 给我们一个 的实例MyViewController
,那么将返回一个控制器,其中两者都MyViewController
将MyView
具有相同的实例ShoppingCart
- 如果使用 TyphoonScopePrototype,那么每个都有不同的实例
ShoppingCart
- 如果使用 TyphoonScopeSingleton,那么每个人都会有相同的购物车实例,但没有办法释放内存。
. . 所以你看到TyphoonScopeObjectGraph
加载了一个带有共享实例的对象图,但允许在用例之后丢弃整个对象图。