title: Do I need to use [weak self] if I'm making a network request using a singleton networking service?
body: <p>Suppose I have a networking singleton that uses Alamofire's SessionManager such as this:</p>
  
  <p>import Alamofire</p>
  
  <pre><code>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: (() -&gt; ())? = nil) {
          sessionManager.request(url, method: .post, parameters: params).validate().responseData {
              // do something with response
              completion()
          }       }
  }
  </code></pre>
  
  <p>Which I then use in a service class:</p>
  
  <pre><code>class SomeService {
      static let shared = SomeService()
      private init() {}
  
      func doSomePostRequest(params: [String: Any]? = nil, completion: (() -&gt; ())? = nil) {
          Network.shared.postRequest(params: params, completion: completion)
      }
  }
  </code></pre>
  
  <p>I then make a request and reload a tableview using this service class:</p>
  
  <pre><code>class MyViewController: UITableViewController {
      @IBAction func fetchData(_: Any)  {
          SomeService.shared.doSomePostRequest {
              // do i need to use [weak self] here?
              self.tableView.reloadData()
          }
      }
  }
  </code></pre>
  
  <p>Do I still need to use [weak self] to avoid crashes and strong reference cycles? At any point, the user can dismiss MyViewController by pressing Back.</p>
  
  <p>Am I correct in assuming that I don't need it since the service class is a singleton? And that if I make it an instance in MyViewController, I'd have to use [weak self]?</p>