问题描述
这是我从网络中获取一些数据的方法:
func fetchProducts(parameters: [String: Any],success: @escaping ([Product]) -> Void)
您已经注意到,它具有转义闭包。这是我在ViewModel中调用上述方法的方式:
service.fetchProducts(parameters: params,success: { response in
self.isLoading?(false)
/// doing something with response
})
问题是我应该弱还是强捕获self
?为什么?我想我可以很好地抓住它。因为fetchProducts
是一个将闭包作为参数的函数。但是,我可能错了。但是,从其他角度看,我认为这应该是薄弱的。因为ViewModel强烈引用service
,所以service
强烈引用了success
闭包,而闭包也强烈引用了self
(即ViewModel)。它创建保留周期。但是在拥有ViewModel的deinit
被取消初始化之后,无论如何都会调用ViewModel的ViewController
。这意味着没有保留周期。为什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)