Код IT Загрузка примера кода…

Plain text main.swift
class DataViewController: UIViewController {
    
    private var dataManager: DataManager?
    private var observers: [NSObjectProtocol] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        dataManager = DataManager.shared
        setupObservers()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        dataManager?.startFetching()
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        dataManager?.stopFetching()
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        removeObservers()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        dataManager?.clearCache()
    }
    
    private func setupObservers() {
        let notificationCenter = NotificationCenter.default
        
        let observer1 = notificationCenter.addObserver(
            forName: .dataUpdated,
            object: nil,
            queue: .main
        ) { [weak self] notification in
            self?.handleDataUpdate()
        }
        observers.append(observer1)
        
        let observer2 = notificationCenter.addObserver(
            forName: .connectionChanged,
            object: nil,
            queue: .main
        ) { [weak self] notification in
            self?.handleConnectionChange()
        }
        observers.append(observer2)
    }
    
    private func removeObservers() {
        let notificationCenter = NotificationCenter.default
        observers.forEach { notificationCenter.removeObserver($0) }
        observers.removeAll()
    }
    
    deinit {
        print("ViewController освобожден")
        removeObservers()
    }
}
class DataViewController: UIViewController {
    
    private var dataManager: DataManager?
    private var observers: [NSObjectProtocol] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        dataManager = DataManager.shared
        setupObservers()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        dataManager?.startFetching()
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        dataManager?.stopFetching()
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        removeObservers()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        dataManager?.clearCache()
    }
    
    private func setupObservers() {
        let notificationCenter = NotificationCenter.default
        
        let observer1 = notificationCenter.addObserver(
            forName: .dataUpdated,
            object: nil,
            queue: .main
        ) { [weak self] notification in
            self?.handleDataUpdate()
        }
        observers.append(observer1)
        
        let observer2 = notificationCenter.addObserver(
            forName: .connectionChanged,
            object: nil,
            queue: .main
        ) { [weak self] notification in
            self?.handleConnectionChange()
        }
        observers.append(observer2)
    }
    
    private func removeObservers() {
        let notificationCenter = NotificationCenter.default
        observers.forEach { notificationCenter.removeObserver($0) }
        observers.removeAll()
    }
    
    deinit {
        print("ViewController освобожден")
        removeObservers()
    }
}