ios - 如果我使用单例网络服务发出网络请求,是否需要使用 [weak self]?

标签 ios swift alamofire

假设我有一个使用 Alamofire 的 SessionManager 的网络单例,如下所示:

导入 Alamofire

class Network {
    static let shared = Network()
    private init() {}

    private var sessionManager: SessionManager = {
        let configuration = URLSessionConfiguration.default
            configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders

                return SessionManager(configuration: configuration)
    }

    func postRequest(params: [String: Any]? = nil, completion: (() -> ())? = nil) {
        sessionManager.request(url, method: .post, parameters: params).validate().responseData {
            // do something with response
            completion()
        }
      }
}

然后我在服务类中使用它:

class SomeService {
    static let shared = SomeService()
    private init() {}

    func doSomePostRequest(params: [String: Any]? = nil, completion: (() -> ())? = nil) {
        Network.shared.postRequest(params: params, completion: completion)
    }
}

然后我发出请求并使用此服务类重新加载 TableView :

class MyViewController: UITableViewController {
    @IBAction func fetchData(_: Any)  {
        SomeService.shared.doSomePostRequest {
            // do i need to use [weak self] here?
            self.tableView.reloadData()
        }
    }
}

我还需要使用 [weak self] 来避免崩溃和强引用循环吗?在任何时候,用户都可以通过按返回来关闭 MyViewController。

我假设我不需要它是否正确,因为服务类是单例?如果我将它作为 MyViewController 中的一个实例,我将不得不使用 [weak self]?

最佳答案

您使用对对象的弱引用来确保它们在应该释放的时候被释放。

单例永远不会被释放。因此,无论您拥有强指针、弱指针还是不安全指针都无关紧要。无需使引用变弱。

关于ios - 如果我使用单例网络服务发出网络请求,是否需要使用 [weak self]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51122057/

相关文章:

iphone - 保存来自用户的请求

ios - 当应用唤醒更新时 LocationManager 崩溃

ios - WKInterfacePicker 列表中的图片样式

ios - Alamofire - 从 Swift 2 转换到 swift 3 时出错

ios - 在我的子项目(CocoaTouch 框架)中使用第 3 方框架(Alamofire)

ios - initWithCoder : function is not called from unarchiveObjectWithData:

ios - 我怎么能得到iOS8.3中的一组表情符号

swift - 根据 SDWebImage 图像高度调整表格 View 高度

swift - Swift 3.1 中的方法调配

swift - 阿拉莫菲尔后下一个瓦尔