假设我有以下代码
self.customObj = self.assembly.customObj() as? NSObject
let temp3 = self.assembly.customObj() as NSObject
如果我将
TyphoonScopeObjectGraph
用作customObj
,则它应返回相同的实例。但是当我调试时,
customObj
属性与所示的不同:据我了解,
customObj
和temp3
应该是同一实例。但是,如您在图像中所见,customObj
和temp3
具有相同的ObjectiveC.NSObject
地址,但是其所有属性(_shortFormatter
,_longFormatter
)都具有不同的地址。发生什么事?我们如何获得customObj
和temp3
的相同实例。一个例子非常有帮助。谢谢。
您可以从here获取项目源代码
最佳答案
在上面的示例中,如果您希望self.customObj
和temp3
是相同的实例,则需要TyphoonScopeSingleton
或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
实例ShoppingCart
实例。 。因此,您会看到
TyphoonScopeObjectGraph
加载具有共享实例的对象图,但允许在用例之后丢弃整个对象图。关于ios - TyphoonScopeObjectGraph如何工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28084763/