Предположим, у меня есть сетевой синглтон, который использует SessionManager Alamofire, например:
импорт 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)
}
}
Затем я делаю запрос и перезагружаю таблицу, используя этот класс обслуживания:
class MyViewController: UITableViewController {
@IBAction func fetchData(_: Any) {
SomeService.shared.doSomePostRequest {
// do i need to use [weak self] here?
self.tableView.reloadData()
}
}
}
Нужно ли мне по-прежнему использовать [слабое я], чтобы избежать сбоев и циклов сильных ссылок? В любой момент пользователь может закрыть MyViewController, нажав Назад.
Правильно ли я полагаю, что мне это не нужно, поскольку класс обслуживания является одноэлементным? И что, если я сделаю это экземпляром в MyViewController, мне придется использовать [слабое Я]?