TyphoonScopeObjectGraph

TyphoonScopeObjectGraph

假设我有以下代码

self.customObj = self.assembly.customObj() as? NSObject
let temp3 = self.assembly.customObj() as NSObject

如果我将TyphoonScopeObjectGraph用作customObj,则它应返回相同的实例。
但是当我调试时,customObj属性与所示的不同:

据我了解,customObjtemp3应该是同一实例。但是,如您在图像中所见,customObjtemp3具有相同的ObjectiveC.NSObject地址,但是其所有属性(_shortFormatter_longFormatter)都具有不同的地址。发生什么事?我们如何获得customObjtemp3的相同实例。一个例子非常有帮助。
谢谢。

您可以从here获取项目源代码

最佳答案

在上面的示例中,如果您希望self.customObjtemp3是相同的实例,则需要TyphoonScopeSingletonTyphoonScopeWeakSingleton
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的实例,那么将返回一个控制器,其中MyViewControllerMyView将具有相同的ShoppingCart实例
  • 如果使用TyphoonScopePrototype,则每个人都有一个不同的ShoppingCart实例
  • 如果使用TyphoonScopeSingleton,则每个实例都具有相同的购物车实例,但是无法释放内存。

  • 。 。因此,您会看到TyphoonScopeObjectGraph加载具有共享实例的对象图,但允许在用例之后丢弃整个对象图。

    关于ios - TyphoonScopeObjectGraph如何工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28084763/

    10-11 14:50