发出异步网络请求时,我应该使用“弱自我”吗?

问题描述

这是我从网络中获取一些数据的方法:

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 (将#修改为@)