Your question is Memory Management Code Review. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
At Glassdoor, you're reviewing a feed screen before it merges. The reviewer's note is short: "had you look over some code and describe what needed to be fixed regarding memory management and weak self, then fix it."
class FeedViewController: UIViewController {
var apiClient: APIClient
var items: [FeedItem] = []
var notificationToken: NSObjectProtocol?
init(apiClient: APIClient) {
self.apiClient = apiClient
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) { fatalError() }
override func viewDidLoad() {
super.viewDidLoad()
loadFeed()
notificationToken = NotificationCenter.default.addObserver(forName: .feedDidUpdate, object: nil, queue: .main) { _ in
self.loadFeed()
}
}
func loadFeed() {
apiClient.fetchFeed { result in
switch result {
case .success(let items):
self.items = items
self.reloadTable()
case .failure(let error):
self.showError(error)
}
}
}
func refreshOnTimer() {
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { _ in
self.loadFeed()
}
}
func reloadTable() { }
func showError(_ error: Error) { }
}
Describe what needs to be fixed here regarding memory management and weak self, then explain exactly how you'd fix it. This is answered as free text, so explain the change and why, rather than submitting an edited file.